WP_NAV_MENU()在类别内的单个产品页面上丢失‘Current-Menu-*’类

时间:2012-12-13 作者:Jarryd

我的菜单设置如下:

  • Shop Online (WPeC“产品页面”页面)Product Category (WPeC类别)Product Category (WPeC类别)Product Sub Category (WPeC类别)Product Sub Category (WPeC类别)

    现在,当我选择“在线购物”、“产品类别”或“子类别”时,菜单会更新其CSS类,以使当前的层次结构与通常的层次结构相匹配(示例)current-menu-page, current-menu-ancestorcurrent-menu-parent 除其他外。无论我是否点击菜单或在线购物页面上的类别列表,都可以到达那里。

    出于某种原因,当我以独特的方式看待产品时(domain.tld/product-cat/sub-cat/product-singledomain.tld/product-cat/product-single), 菜单类被删除,我失去了菜单突出显示,因为这些类不再存在。

    是否有一种方法可以通过突出显示产品所在的当前类别以及Shop Online 菜单项/链接分别说明您是如何访问该产品的?

    WP v3。5.

    WPeC v3。8.9.4

4 个回复
最合适的回答,由SO网友:Ryan 整理而成

为了解决同样的问题,我遇到了以下问题:

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 );
}
代码来源:http://www.rarescosma.com/2010/11/add-a-class-to-wp_nav_menu-items-with-urls-included-in-the-current-url/

希望有帮助!

SO网友:dpolyakov

如果您使用的是Woocommerce插件,那么可以添加如下类

    if (
        ($post->post_type == \'product\') &&
        ($item->object_id == get_option(\'woocommerce_shop_page_id\'))
    ) {
        array_push($classes, \'current-page-ancestor\');
    }
如何获取WooCommerce页面ID

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

SO网友:squarecandy

感觉有点像黑客,但我最终使用了这个CSS解决方案。花费了大约5分钟的时间,而不是花费数小时来尝试如何添加.current-menu-ancestor 使用PHP进入菜单漫游器。

请注意,对于仅适用于一个站点的自定义主题或插件,这是一个很好的解决方案。显然,使用特定的菜单ID并不能创建可用于Wordpress主题的通用解决方案。组织市场等。

原始CSS:

.current-menu-item > a,
.current-menu-ancestor > a {
    color: #000;
}
新CSS:

.current-menu-item > a,
.current-menu-ancestor > a,
.woocommerce-page #menu-item-1234 > a /* add your own Store menu item ID here */
{
    color: #000;
}
Thewoocommerce-page 车身级别盖:

门店主页(store home)门店分类档案(store taxonomy archives)单个产品页面(cart)收银台(checkout)可能是我目前没有想到的其他一些东西(成功地)没有针对网站的其他区域

SO网友:Jarryd

如技术支持人员所述getshopped.org:

【原文如此】实际上是WordPress菜单系统的一个限制。我不知道有什么方法可以改变这种行为。可能您可以找到一个菜单插件,并将您的菜单区域设置为一个小部件,您可以在其中逐个小部件添加菜单,从而提供增强的菜单系统。

结束

相关推荐

WooCommerce dynamic menus

我有一个基本的WordPress网站,设置了Suffusion主题和WooCommerce插件。这在大多数情况下都很有效,但是当我让人们点击/悬停在“Shop”菜单图标上时,我希望它能够动态地下拉我定义的产品类别。我如何做到这一点?我肯定有关于这个主题的文档,但我不确定要查找什么。我主要是一名系统管理员。