wp_nav_menu () verliert ‘current-menu-*’ classn auf einer einzelnen Produktseite innerhalb der Kategorie

Ich habe mein Menü so eingerichtet:

  • Online einkaufen (WPeC ‘Produkte Seite’ Seite)
    • Produktkategorie (WPeC-Kategorie)
    • Produktkategorie (WPeC-Kategorie)
      • Produkt Unterkategorie (WPeC Kategorie)
      • Produkt Unterkategorie (WPeC Kategorie)

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

Wenn ich jetzt entweder Shop Online , eine Produktkategorie oder Unterkategorie auswähle, aktualisiert das Menü seine CSS-classn so, dass sie der aktuellen Hierarchie mit der üblichen (Beispiel) current-menu-page Menüseite, dem aktuellen Menüvorfahr und dem current-menu-parent Andere. Es spielt keine Rolle, ob ich auf das Menü oder den Kategorielisting auf der Shop Online Seite klicke, um dorthin zu gelangen.

Aus irgendeinem Grund, sobald ich ein Produkt einzeln domain.tld/product-cat/sub-cat/product-single ( domain.tld/product-cat/sub-cat/product-single oder domain.tld/product-cat/product-single ), werden die Menü-classn entfernt und ich verliere meine Menü-Hervorhebung, weil die classn nicht mehr da sind.

Gibt es eine Möglichkeit, dass ich die einzelne Produktansicht im Menü widerspiegeln kann, indem ich die aktuelle (n) Kategorie (n) hervorhebe, in der sich das Produkt befindet, sowie den Menüeintrag ” Shop Online bzw. den Link zum Produkt?

WP v3.5

WPeC v3.8.9.4

Solutions Collecting From Web of "wp_nav_menu () verliert ‘current-menu-*’ classn auf einer einzelnen Produktseite innerhalb der Kategorie"

Auf der Suche nach einer Lösung für dasselbe Problem stieß ich auf folgendes:

 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-in-the-current-url/

Ich hoffe es hilft!

Wenn Sie das Woocommerce-Plugin verwenden, können Sie eine class wie diese 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' ); 

Wie von einem Support- Techniker bei getshopped.org erklärt :

[sic] ist eigentlich eine Einschränkung des WordPress Menüsystems. Ich bin mir nicht bewusst, wie ich dieses Verhalten ändern könnte. Möglicherweise könnten Sie ein Menü-Plugin finden und Ihren Menübereich zu einem Widget machen, wo Sie das Menü per Widget hinzufügen können, das ein erweitertes Menüsystem bietet.