Ich habe mein Menü so eingestellt:
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
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 );
}
Ich hoffe es hilft!
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' );