it-swarm.com.de

aktuellen Navigationspfad aus dem Menü anzeigen

Ich möchte so etwas

Home> Produkte> Stahl> Nägel

Diese Informationen sollten aus der Menüstruktur stammen! Ich habe Breadcrumb NavXT installiert, aber anscheinend wird nur der von mir definierte Pfad verwendet (dies ist der übergeordnete Pfad usw.). Das brauche ich aber aus der Menüstruktur nicht vom User. Muss ich die übergeordnete Seite für jede Seite festlegen oder gibt es eine Lösung, die die Hierarchie aus meinem Menü ausliest? Ich habe kein seeting Breadcrumb NavXT gefunden und es scheint, dass ich dafür ein PHP Skript schreiben muss.

Bearbeiten:

Für meine Folgefrage habe ich den folgenden Code hinzugefügt:

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

Der beste Weg wäre, wp_nav_menu mit einem benutzerdefinierten Walker zu verwenden.

Voraussetzungen:

Nutzung

Wo immer Sie möchten, die Semmelbrösel ( für die Themenposition 'primary' ):

<?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>'
 ) ); ?>

Der Custom Walker

Das ist sehr grundlegend . (Dies könnte auch auf eine andere Weise geschehen - display_element überschreiben? -, aber ich fand das am einfachsten). Dies sollte in Ihrem functions.php leben

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