Jusqu’à présent, nous avons vu à quel point il est simple de gérer les options de thème à l’aide du personnalisateur de thème Boilerplate et de ses crochets. Comme vous vous en souvenez probablement, l’étape la plus importante a été de ‘thsp_cbp_options_array’ filtre hook et en lui passant le tableau des options que vous souhaitez utiliser dans votre thème.

Je suis sûr que vous connaissez déjà l’action WordPress et les hooks de filtrage – Plugin API – et leur fonctionnement, mais au cas où, voici un bref récapitulatif (en utilisant les hooks de filtre comme exemple). Vous pouvez définir votre fonction personnalisée et la raccorder à 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 la priorité d’exécution de votre fonction. Réduisez 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 modèle, le contenu de l’article 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 hameçons comme s’il s’agissait de boules de neige roulant sur la colline, ramassant toutes sortes de choses sur leur chemin.

Comment cela s’applique-t-il à la plaque de cuisson du personnalisateur de thème?

Vous pouvez vous connecter ‘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’ Le hook de filtre 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 une 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 );

Vous avez 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 du personnalisateur de thème Boilerplate. Ensuite, lorsque je me suis connecté à nouveau à partir de mon thème enfant, je ne voulais pas supprimer complètement les options du thème parent, juste les modifier légèrement. C’est pourquoi je ne joue qu’avec $ options[‘my_theme_new_section’][‘fields’], pas tout le tableau $ options.

Bien sûr, vous pouvez également vous connecter à ‘thsp_cbp_options_array’ filtre hook de votre thème parent plus d’une fois. Disons que vous avez choisi de ne pas ajouter de fonctionnalités de territoire de plugin à votre thème et de laisser les plugins faire ce qu’ils sont censés faire. Vous souhaitez maintenant afficher certaines options du personnalisateur 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 );

Envie de développer un plugin de fonctionnalité de base à utiliser avec votre thème (comme vous devriez)? Vous pouvez vous connecter ‘thsp_cbp_options_array’ à partir de l’un des fichiers de votre plugin également, de la même manière que vous le feriez à partir du fichier function.php d’un thème.

Ne devenez pas fou

Chaque fois que vous ajoutez des options à un thème que vous développez, vous devez conserver l’un des principes fondamentaux de WordPress – Décision et non 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 à maintenir 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 excellent.

Vous n’achetez pas de chemise blanche parce qu’avec un effort supplémentaire vous pouvez la transformer en nappe, vous l’achetez parce que vous aimez sa «blancheur». 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.

Share: