Jusqu’à présent, nous avons vu à quel point il est simple de gérer les options de thème à l’aide de Theme Customizer Boilerplate et de ses crochets. Comme vous vous en souvenez probablement, l’étape la plus importante a été de s’accrocher à ‘thsp_cbp_options_array’ crochet de filtre et lui transmettre un tableau d’options que vous souhaitez utiliser dans votre thème.
Je suis sûr que vous êtes déjà familiarisé avec les crochets d’action et de filtrage de WordPress – Plugin API – et leur fonctionnement, mais juste au cas où, voici un récapitulatif rapide (en utilisant les crochets de filtre comme exemple). Vous pouvez définir votre fonction personnalisée et l’accrocher à un filtre existant à l’aide de la fonction add_filter :
add_filter( $tag, $function_to_add, $priority, $accepted_args );
Concentrons-nous sur l’argument de priorité. Sa valeur par défaut est 10, donc si vous n’utilisez pas un autre nombre, c’est ce que sera la priorité d’exécution de votre fonction. Diminuez le nombre, plus tôt votre fonction est exécutée. Donc si vous faites quelque chose comme ça :
// Adding first message
function my_theme_add_first_message( $content ) {
$content .= '<p>First Message</p>';
return $content;
}
add_filter( 'the_content', 'my_theme_add_first_message', 1 );
// Adding second message
function my_theme_add_second_message( $content ) {
$content .= '<p>Second Message</p>';
return $content;
}
add_filter( 'the_content', 'my_theme_add_second_message', 2 );
Lorsque vous appelez la fonction the_content dans single.php ou tout autre contenu de publication de modèle sera affiché, suivi du premier message, suivi du deuxième message. Non pas parce que c’est leur ordre dans cet extrait de code, mais à cause du paramètre de priorité d’exécution. Pensez aux crochets comme s’ils étaient des boules de neige dévalant la colline en ramassant toutes sortes de choses sur leur chemin.
Comment cela s’applique-t-il à Theme Customizer Boilerplate ?
Vous pouvez vous accrocher ‘thsp_cbp_options_array’ à partir du fichier function.php de votre thème, en utilisant une fonction personnalisée (par exemple my_theme_options_array) avec une valeur de priorité définie sur 1. Cela signifie toute autre fonction qui se connecte à ‘thsp_cbp_options_array’ filter hook le fera APRÈS la fonction my_theme_options_array que vous avez déjà définie. Jetez un œil à cet exemple :
function my_theme_options_array() {
// Using helper function to get default required capability
$thsp_cbp_capability = thsp_cbp_capability();
$options = array(
// Section ID
'my_theme_new_section' => array(
'existing_section' => false,
'args' => array(
'title' => __( 'New Section', 'my_theme_textdomain' ),
'priority' => 10
),
'fields' => array(
/*
* Radio field
*/
'my_radio_button' => array(
'setting_args' => array(
'default' => 'option-2',
'type' => 'option',
'capability' => $thsp_cbp_capability,
'transport' => 'refresh',
),
'control_args' => array(
'label' => __( 'My Radio Button', 'my_theme_textdomain' ),
'type' => 'radio', // Radio control
'choices' => array(
'option-1' => array(
'label' => __( 'Option 1', 'my_theme_textdomain' )
),
'option-2' => array(
'label' => __( 'Option 2', 'my_theme_textdomain' )
),
'option-3' => array(
'label' => __( 'Option 3', 'my_theme_textdomain' )
)
),
'priority' => 3
)
)
)
)
);
return $options;
}
add_filter( 'thsp_cbp_options_array', 'my_theme_options_array', 1 );
Cela ajoutera une nouvelle section au personnalisateur de thème avec un champ, appelé Mon bouton radio. Ensuite, vous ou quelqu’un d’autre développez un thème enfant pour votre thème et décidez de conserver la nouvelle section, mais au lieu de Mon bouton radio, il serait peut-être préférable d’avoir Ma case à cocher. Facile:
function my_child_theme_options_array( $options ) {
// Using helper function to get default required capability
$thsp_cbp_capability = thsp_cbp_capability();
/*
* This time, we're only editing fields in my_theme_new_section in the $options array
*/
$options['my_theme_new_section']['fields'] = array(
'my_checkbox_field' => array(
'setting_args' => array(
'default' => true,
'type' => 'option',
'capability' => $thsp_cbp_capability,
'transport' => 'refresh',
),
'control_args' => array(
'label' => __( 'My Checkbox', 'my_theme_textdomain' ),
'type' => 'checkbox', // Checkbox field control
'priority' => 2
)
)
);
return $options;
}
add_filter( 'thsp_cbp_options_array', 'my_child_theme_options_array', 2 );
Remarqué que je n’ai pas passé le paramètre $options à my_theme_options_array et que je l’ai fait dans la fonction my_child_theme_options_array ? C’est parce que quand je me suis accroché pour la première fois à ‘thsp_cbp_options_array’ hook Je voulais remplacer les options d’exemple de Boilerplate du personnalisateur de thème. Ensuite, lorsque je m’y suis à nouveau connecté à partir de mon thème enfant, je ne voulais pas supprimer complètement les options du thème parent, mais les modifier légèrement. C’est pourquoi je ne fais que jouer avec $options[‘my_theme_new_section’][‘fields’], pas l’intégralité du tableau $options.
Bien sûr, vous pouvez également vous connecter à ‘thsp_cbp_options_array’ filtrez le crochet de votre thème parent plus d’une fois. Disons que vous avez choisi de ne pas ajouter de fonctionnalités de territoire de plug-in à votre thème et de laisser les plug-ins faire ce qu’ils sont censés faire. Maintenant, vous souhaitez afficher certaines options de personnalisation de thème uniquement si un certain plugin est actif. Encore une fois, facile :
function my_plugin_dependency_options_array( $options ) {
// Using helper function to get default required capability
$thsp_cbp_capability = thsp_cbp_capability();
/*
* Only adding my_plugin_dependency_section if 'test-plugin.php' is active
*/
if ( is_plugin_active( 'test-plugin/test-plugin.php' ) ) {
$options['my_plugin_dependency_section'] = array(
'existing_section' => false,
'args' => array(
'title' => __( 'Plugin Dependency', 'my_theme_textdomain' ),
'priority' => 10
),
'fields' => array(
/*
* Text field
*/
// Field ID
'new_text_field' => array(
'setting_args' => array(
'default' => __( '', 'my_theme_textdomain' ),
'type' => 'option',
'capability' => $thsp_cbp_capability,
'transport' => 'refresh',
),
'control_args' => array(
'label' => __( 'Only shows if', 'my_theme_textdomain' ),
'type' => 'text', // Text field control
'priority' => 5
)
),
)
);
}
return $options;
}
add_filter( 'thsp_cbp_options_array', 'my_plugin_dependency_options_array', 3 );
Vous souhaitez développer un plugin de fonctionnalité de base à utiliser avec votre thème (comme il se doit) ? Vous pouvez vous accrocher ‘thsp_cbp_options_array’ à partir de l’un des fichiers de votre plugin, de la même manière que vous le feriez à partir du fichier function.php d’un thème.
Ne partez pas avec l’option folle
Chaque fois que vous ajoutez des options à un thème que vous développez, vous devez conserver l’un des principes de base de WordPress — Décision pas Options – à l’esprit. Il est facile de se laisser emporter et de commencer à ajouter des options utilisateur pour chaque détail mineur de votre thème, mais cela ne rend service à personne. J’espère que ces quelques astuces, en particulier l’ajout d’options dépendantes du plugin, aideront à garder le nombre d’options de votre thème aussi bas que possible.
Après tout, si votre thème a des options pour des choses comme chaque rayon de bordure de chaque élément, ce n’est pas un thème, c’est un éditeur WYSIWYG et probablement pas un bon.
Vous n’achetez pas une chemise blanche parce qu’avec un effort supplémentaire vous pouvez la transformer en nappe, vous l’achetez parce que vous aimez sa « chemise blanche ». Les thèmes WordPress devraient être comme ça aussi, ils devraient présenter le contenu d’une certaine manière, ne pas essayer de tout faire de toutes les manières imaginables. Si vous êtes un développeur de thèmes, c’est votre travail de vous assurer que les attentes des utilisateurs sont ce qu’elles devraient être.