WordPress : Impossible d’ajouter un paramètre au panneau de personnalisation « nav_menus »

Publié par Jean-Michel le

J’essaie d’ajouter une case à cocher au panneau « Menus » dans le personnalisateur, mais pour une raison quelconque, elle ne s’affiche pas. Si j’essaie de le changer de « nav_menus » à « title_tagline » ou « colors », la case à cocher s’affiche très bien. Qu’est-ce qui pourrait l’empêcher d’apparaître dans le panneau « Menus » ?

// add custom options to the Customizer
function nssra_customizer_options($wp_customize) {
    // add "menu primary flex" checkbox setting
    $wp_customize->add_setting("menu_primary_flex", array(
        "capability"        => "edit_theme_options",
        "default"           => "1",
        "sanitize_callback" => "nssra_sanitize_checkbox",
    ));

    // add "menu primary flex" checkbox control
    $wp_customize->add_control("menu_primary_flex", array(
        "label"    => __("Stretch the primary menu to fill the available space.", "nssra"),
        "section"  => "nav_menus",
        "settings" => "menu_primary_flex",
        "std"      => "1",
        "type"     => "checkbox",
        "priority" => 1,
    ));
}
add_action("customize_register", "nssra_customizer_options");

// sanitize checkbox fields
function nssra_sanitize_checkbox($input, $setting) {
    return sanitize_key($input) === "1" ? 1 : 0;
}

Solution n°1 trouvée

Ajoutez ce qui suit ici au cas où vous vous perdriez en cours de route comme je l’ai fait. La solution de @odiPlabon est correcte pour le panneau « nav_menus ». Je suis venu chercher à ajouter des paramètres aux sections de menu individuelles, par exemple des menus thématiques comme le « Menu principal » ou le « Menu secondaire ».

Pour ceux qui sont aussi perdus que moi, la « section » que vous recherchez est « nav_menu[ $n ] ». Où $n est le term_id du menu de navigation.

Vous pouvez voir le term_id dans les paramètres de requête de l’url dans la barre d’adresse pour le menu actuellement affiché – sur la page WordPress Admin > Apparence > Menus, c’est-à-dire « ?action=edit&menu=43 » <– 43 étant le term_id

$menus = wp_get_nav_menus();
if ( ! $menus && ! is_iterable($menus)) :
    return;
endif;

        foreach ($menus as $menu) :
            //
            $wp_customize->add_setting(
                    'menu_postition_' . $menu->term_id, // your setting name
                    array(
                        'settings' => 'nav_menu[' . $menu->term_id . ']',
                        'default' => 'menu-static',
                    )
            );
            //
            $wp_customize->add_control(
                    'menu_postition_' . $menu->term_id, // your setting name
                    array(
                        'type' => 'select',
                        'priority' => 20,
                        'label' => __('Menu Position:','text-domain),
                        'section' => 'nav_menu[' . $menu->term_id . ']',
                        'choices' => array(
                            'menu-static' => 'Normal',
                            'menu-fixed-top' => 'Fixed Top',
                            'menu-sticky-top' => 'Sticky Top',
                        ),
                    )
            );
        endforeach;

Solution n°2 trouvée

Vous ne pouvez pas ajouter de contrôle/paramètre nav_menuscar ce n’est pas une section qui est un panneau. Et le contrôle/réglage ne peut être ajouté qu’à la section. Vous devez donc d’abord créer une section sous nav_menusle panneau, puis ajouter votre contrôle/paramètre à cette section. Vérifiez le code suivant

function nssra_customizer_options( $wp_customize ) {
    // add a custom section
    $wp_customize->add_section( 'nav_menus_custom', array(
        'title' => __( 'Custom Section Title', 'nssra' ),
        'panel' => 'nav_menus'
    ) );

    // add "menu primary flex" checkbox setting
    $wp_customize->add_setting( 'menu_primary_flex', array(
        'capability'        => 'edit_theme_options',
        'default'           => '1',
        'sanitize_callback' => 'nssra_sanitize_checkbox',
    ) );

    // add 'menu primary flex' checkbox control
    $wp_customize->add_control( 'menu_primary_flex', array(
        'label'    => __( 'Stretch the primary menu to fill the available space.', 'nssra' ),
        'section'  => 'nav_menus_custom',
        'settings' => 'menu_primary_flex',
        'std'      => '1',
        'type'     => 'checkbox',
        'priority' => 1,
    ));
}
add_action( 'customize_register', 'nssra_customizer_options' );

// sanitize checkbox fields
function nssra_sanitize_checkbox( $input, $setting ) {
    return sanitize_key( $input ) === '1' ? 1 : 0;
}

Update

Vous devez ajouter une section descriptionpour créer l’ apparence des emplacements de menupriority et si vous souhaitez modifier l’emplacement de la section, vous pouvez définir . priority => 5placera la section personnalisée avant Menu Locations , si vous faites cela, vous devrez peut-être ajuster certains styles. Veuillez vérifier le code ci-dessous pour la configuration de section mise à jour.

$wp_customize->add_section( 'nav_menus_custom', array(
    'title'       => __( 'Custom Section Title', 'nssra' ),
    'panel'       => 'nav_menus',
    'description' => __( 'Section description goes here.', 'nssra' ),
    'priority'    => 5
) );

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *