Current menu item class issue

时间:2016-02-16 作者:Meivyn

我正在尝试对所选页面的导航菜单进行样式化。

我为新闻创建了一个页面,但当我单击以下页面(例如第2页)时,导航菜单将失去其类别。我希望它保持current-item-menu 在这个案子上。

我该怎么做?

谢谢你的帮助!

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

您可以使用nav_menu_css_class 筛选以更改添加到导航项的类。您需要对照您所在页面的URL检查当前菜单项的URL。

add_filter( \'nav_menu_css_class\', \'wpse_217882_menu_class\', 10, 2 );
function wpse_217882_menu_class( $classes = array(), $item = false ) {

    // Get current URL
    $current_url = wpse_217882_current_url();

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

    // Don\'t do anything on 404s or the homepage
    if( is_404() || $item->url == $homepage_url || $item->url == \'/\' )
        return $classes;

    // Check if the current URL contains the items URL
    // This should match paginated pages for example
    if ( strstr( $current_url, $item->url ) ) {
        // Add the \'.current-menu-item\' class
        $classes[] = \'current-menu-item\';
    }

    // You can use this to match different URLs
    // This will add the .current-menu-item class to the /blog/ nav item
    // when viewing /category/ pages
    if ( strstr( $item->url, \'/blog/\' ) && strstr( $current_url, \'/category/\' ) ) {
        // Add the \'.current-menu-item\' class
        $classes[] = \'current-menu-item\';
    }

    return $classes;
}
此函数用于获取wpse_217882_menu_class 作用它使用全局$_SERVER 以生成URL。

function wpse_217882_current_url() {

    // Protocol
    $url = ( isset($_SERVER[\'HTTPS\']) && $_SERVER[\'HTTPS\'] == \'on\' ) ? \'https://\' : \'http://\';
    // Server
    $url .= $_SERVER[\'SERVER_NAME\'];
    // Port
    $url .= ( \'80\' == $_SERVER[\'SERVER_PORT\'] ) ? \'\' : \':\' . $_SERVER[\'SERVER_PORT\'];
    // URI
    $url .= $_SERVER[\'REQUEST_URI\'];

    return trailingslashit( $url );
}
这可能不是获取当前URL的最佳方式,但我在过去使用过。您可以在此处阅读有关获取当前URL的更多信息:

SO网友:LWS-Mo

我不确定我是否完全理解你的问题,但也许你可以试试这样的方法。

请参见此图像:

some simple wp menu

您可以看到当前活动页面为“Child“。

“页面”Child“和”Another Child“是页面的子页面”Parent“。我的意思是我选择了”Parent“页面位于”Page Attributes“在后端。

然后我创建了一个菜单,但只是在同一级别(不是Hirachic)上连续添加了这3个站点,如图所示。

记住当前活动页面为“Child,但您可以看到Parent“菜单项具有特殊类别:

current-page-parent
添加此类是因为我在“页面属性”中选择了父级。

为了测试这一点,我只做了以下操作:我更改了“Child“页面不再是的子级”Parent“页。(我没有选择父项)

Than I had to re-save the menu / re-add the menu item(Child), and after that the current-page-parent class was gone!(如果你不更新菜单,这个类就会保留下来,至少在我的测试站点上是这样!)

因此,也许可以尝试在current-page-parent 上课,或摆弄它。您可以添加与当前项目相同的样式。

您将看到,还将向每个项目添加其他类,例如祖先类。

祝你今天愉快!

相关推荐

用标准的干净文件替换NAV-menus.php文件?

我是一个自学成才的wordpress网站设计师,请原谅我的无知。我为一个客户开发的几个网站最近被一个印尼黑客组织破坏了(很有趣!)。客户端没有更新wordpress安装和其他一些危及安全的事情。遗憾的是,没有网站的清理备份。网络主机给了我一个包含恶意软件扫描结果的文本文件。看起来很多受影响的文件都是导航菜单。网站的php文件。文本文件中显示的扫描结果示例如下:“[主目录]/[网站文件夹名称]/wp includes/nav-menu.php:SL-php-INJECTOR-1-ejw.UNOFFICIAL