web-dev-qa-db-de.com

wp_nav_menu () verliert 'current-menu- *' Klassen auf einer einzelnen Produktseite innerhalb der Kategorie

Ich habe mein Menü so eingestellt:

  • Online-Shop (WPeC-Seite "Produkte")
    • Produktkategorie (WPeC-Kategorie)
    • Produktkategorie (WPeC-Kategorie)
      • Produktunterkategorie (WPeC-Kategorie)
      • Produktunterkategorie (WPeC-Kategorie)
    • ...

Einzelne Produktseiten können von jeder Kategorie- oder Unterkategorieseite aus angezeigt werden, da beide die Produktlistenansicht anzeigen.

Wenn ich nun entweder Online einkaufen , eine Produktkategorie oder eine Unterkategorie auswähle, aktualisiert das Menü seine CSS-Klassen, um unter anderem die aktuelle Hierarchie mit dem üblichen (Beispiel) current-menu-page, current-menu-ancestor und current-menu-parent abzugleichen. Es ist egal, ob ich auf das Menü oder die Kategorie-Liste auf der Seite Online-Shop klicke, um dorthin zu gelangen.

Aus irgendeinem Grund werden die Menüklassen entfernt, sobald ich ein Produkt einzeln ansehe (domain.tld/product-cat/sub-cat/product-single oder domain.tld/product-cat/product-single), und ich verliere die Hervorhebung meines Menüs, weil die Klassen nicht mehr vorhanden sind.

Gibt es eine Möglichkeit, wie ich die Ansicht eines einzelnen Produkts im Menü widerspiegeln kann, indem ich die aktuelle (n) Kategorie (n), in der/denen sich das Produkt befindet (n), sowie den Shop Online-Menüpunkt/-link in Bezug darauf, wie Sie zum Produkt gelangt sind?

WP v3.5

WPeC v3.8.9.4

3
Jarryd

Auf der Suche nach einer Lösung für dasselbe Problem bin ich auf Folgendes gestoßen:

add_filter( 'nav_menu_css_class', 'add_parent_url_menu_class', 10, 2 );

function add_parent_url_menu_class( $classes = array(), $item = false ) {
    // Get current URL
    $current_url = current_url();

    // Get homepage URL
    $homepage_url = trailingslashit( get_bloginfo( 'url' ) );

    // Exclude 404 and homepage
    if( is_404() or $item->url == $homepage_url ) return $classes;

    if ( strstr( $current_url, $item->url) ) {
        // Add the 'parent_url' class
        $classes[] = 'parent_url';
    }

    return $classes;
}

function current_url() {
    // Protocol
    $url = ( 'on' == $_SERVER['HTTPS'] ) ? 'https://' : 'http://';
    $url .= $_SERVER['SERVER_NAME'];

    // Port
    $url .= ( '80' == $_SERVER['SERVER_PORT'] ) ? '' : ':' . $_SERVER['SERVER_PORT'];
    $url .= $_SERVER['REQUEST_URI'];
    return trailingslashit( $url );
}

Code von: http://www.rarescosma.com/2010/11/add-a-class-to-wp_nav_menu-items-with-urls-included-the-current-url/

Ich hoffe es hilft!

3
Ryan

Wenn Sie das Woocommerce-Plugin verwenden, können Sie eine solche Klasse hinzufügen

    if (
        ($post->post_type == 'product') &&
        ($item->object_id == get_option('woocommerce_shop_page_id'))
    ) {
        array_Push($classes, 'current-page-ancestor');
    }

So erhalten Sie WooCommerce-Seiten-IDs

get_option( 'woocommerce_shop_page_id' ); 
get_option( 'woocommerce_cart_page_id' ); 
get_option( 'woocommerce_checkout_page_id' );
get_option( 'woocommerce_pay_page_id' ); 
get_option( 'woocommerce_thanks_page_id' ); 
get_option( 'woocommerce_myaccount_page_id' ); 
get_option( 'woocommerce_edit_address_page_id' ); 
get_option( 'woocommerce_view_order_page_id' ); 
get_option( 'woocommerce_terms_page_id' ); 
0
dpolyakov