web-dev-qa-db-fra.com

Ajouter des éléments à un menu dynamiquement

Je fais un site dans WP avec un contenu dynamique et statique. Je créerais le menu à partir du panneau d'administration. J'ai 5 sections (Accueil, à propos, Bateaux, Nouvelles (blog), contact). Je créerais un type de message personnalisé avec de nouvelles taxonomies pour les bateaux. Ce que je veux faire maintenant, c’est d’afficher automatiquement chaque nouveau modèle de bateau comme un sous-menu de bateaux. Comment puis je faire ça?

1
user26329

Vous pouvez y parvenir avec une fonction de marche personnalisée dans votre menu. un exemple très simple:

class Walker_WPA82563_Submenu extends Walker_Nav_Menu {
    function end_el(&$output, $item, $depth=0, $args=array()) {
        if( 'Boats' == $item->title ){
            $output .= '<ul><li>Dynamic Subnav</li></ul>';
        }
        $output .= "</li>\n";  
    }
}

Ensuite, lorsque vous appelez le menu de navigation, créez une instance de votre marcheur personnalisé avec l’argument walker.

wp_nav_menu(
    array(
        'theme_location' => 'primary',
        'walker' => new Walker_WPA82563_Submenu
    )
);
4
Milo

Je pense qu’il existe une bien meilleure solution adaptée aux cas où les menus sont réellement dynamiques (ils devraient par exemple changer en fonction du rôle de l’utilisateur ou s’il existe tout simplement trop de combinaisons d’éléments de menu possibles à décider au moment de l’exécution).

Wordpress ' wp_nav_menu_objects hook est le plus pratique:

add_filter('wp_nav_menu_objects', 'addMenuItems', null, 2);
function addMenuItems($sortedItems, $args)
{
    $toAdd = [
        (object) [
            'ID'        => 1,               // make sure this doesn't conflict with existing items
            'db_id'     => 1,               // same here
            'title'     => 'To Google!',
            'url'       => 'https://www.google.com',
        ],
    ];

    return array_merge($sortedItems, $toAdd);
}
0
Slavic