web-dev-qa-db-fra.com

afficher le chemin de navigation actuel à partir du menu

Je veux quelque chose comme ça

Accueil> Produits> Acier> Ongles

Cette information devrait provenir de la structure du menu! J'ai installé Breadcrumb NavXT mais il semble que cela ne prenne que le chemin que j'ai défini (c'est le parent, etc.). Mais j'ai besoin de cela dans la structure du menu, pas de l'utilisateur. Dois-je définir la page parent pour chaque page ou existe-t-il une solution permettant de lire la hiérarchie à partir de mon menu? Je n'ai pas trouvé de fichier de navigation Breadcrumb NavXT et il semble que je doive écrire un script PHP pour cela.

Modifier:

Pour ma question suivante, j'ai ajouté le code suivant:

if(in_array('current-menu-item', $item->classes)){
    $attributes .= ' class="active"';
}
4
testing

Le meilleur moyen serait d’utiliser wp_nav_menu avec un programme personnalisé.

Conditions préalables:

Utilisation

Où que vous vouliez la chapelure ( pour l'emplacement du thème 'primaire' ):

<?php wp_nav_menu( array( 
    'container' => 'none', 
    'theme_location' => 'primary',
    'walker'=> new SH_BreadCrumbWalker, 
    'items_wrap' => '<div id="breadcrumb-%1$s" class="%2$s">%3$s</div>'
 ) ); ?>

Le marcheur personnalisé

C'est très basique . (Cela pourrait être fait d'une autre manière -override display_element à la place? - mais j'ai trouvé cela le plus simple). Cela devrait vivre dans votre functions.php

class SH_BreadCrumbWalker extends Walker{
    /**
     * @see Walker::$tree_type
     * @var string
     */
    var $tree_type = array( 'post_type', 'taxonomy', 'custom' );

    /**
     * @see Walker::$db_fields
     * @var array
     */
    var $db_fields = array( 'parent' => 'menu_item_parent', 'id' => 'db_id' );

    /**
     * delimiter for crumbs
     * @var string
     */
    var $delimiter = ' > ';

    /**
     * @see Walker::start_el()
     *
     * @param string $output Passed by reference. Used to append additional content.
     * @param object $item Menu item data object.
     * @param int $depth Depth of menu item.
     * @param int $current_page Menu item ID.
     * @param object $args
     */
    function start_el(&$output, $item, $depth, $args) {

        //Check if menu item is an ancestor of the current page
        $classes = empty( $item->classes ) ? array() : (array) $item->classes;
        $current_identifiers = array( 'current-menu-item', 'current-menu-parent', 'current-menu-ancestor' ); 
        $ancestor_of_current = array_intersect( $current_identifiers, $classes );     


        if( $ancestor_of_current ){
            $title = apply_filters( 'the_title', $item->title, $item->ID );

            //Preceed with delimter for all but the first item.
            if( 0 != $depth )
                $output .= $this->delimiter;

            //Link tag attributes
            $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
            $attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) .'"' : '';
            $attributes .= ! empty( $item->xfn )        ? ' rel="'    . esc_attr( $item->xfn        ) .'"' : '';
            $attributes .= ! empty( $item->url )        ? ' href="'   . esc_attr( $item->url        ) .'"' : '';

            //Add to the HTML output
            $output .= '<a'. $attributes .'>'.$title.'</a>';
        }
    }
}
5
Stephen Harris