当你在有类别的帖子上时,设置活动导航项目(共页)

时间:2016-12-14 作者:Scott

我正在处理我的第一个WordPress自定义主题,现在我遇到了一个问题。我已经组织了这个网站,所以我使用的是头版。php作为我的主页,显示一个带有一些链接的长页面。这些链接指向其他页面。我们把这些叫做T1s。

在这些页面上,我有一个很长的页面正文。我想让这些链接中的一些转到与父页面具有相同slug的类别的帖子(让我们称这些t2)。

问题是,我不知道如何在查看这些帖子时突出显示正确的导航。

不知何故,我需要查看当前帖子,抓取其类别,看看它是否与导航中某个项目的url slug匹配,并突出显示该导航项目。

这是自定义筛选器吗?

我发现,如果我将t2设置为页面而不是帖子,然后相应地设置父/子关系,就会自动发生这种情况。但是,所有网站内容都必须是页面,具有固定的层次结构。我根本不会使用帖子。

我还看到,如果我将导航项设置为一个类别,它也会自动发生。但是,我不喜欢url中的/category/。

我想我需要弄清楚如何使一篇文章的类别与某个过滤器中页面的slug相匹配?

这是最好的方法吗?

谢谢

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

好的,一旦我开始调试工作,我就能够弄清楚这个nav\\u menu\\u css\\u类过滤器是如何工作的。

首先,我解析nav项的url。然后我用它来与帖子的类别数组进行比较。如果找到匹配项,我将设置$classes[]数组,然后就可以开始了。

我知道解析url有点贫民区,但我希望$项将成为目标页面,但事实并非如此。这只是nav中创建的帖子。除了url之外,没有指向其目标的句柄。

add_filter(\'nav_menu_css_class\', \'post_current_category_class\', 10, 2);

function post_current_category_class($classes, $item) {

    // $classes is the list of classes on a nav item
    // $item is the nav item

    if ( is_singular(\'post\') ) {

        $navUrl = $item->url;
        $navParts = parse_url($navUrl);
        $location = ltrim($navParts[\'path\'], \'/\');
        $location = rtrim($location, \'/\');

        $post_category_ids = wp_get_post_categories( $GLOBALS[\'post\']->ID);
        $categories = array();

        foreach($post_category_ids as $c){
            $cat = get_category( $c );
            $categories[] = $cat->slug;
        }

        if (in_array($location, $categories)){
            $classes[] = \'current-menu-item\';
        }

    }

    return $classes;
}

相关推荐

如何在Functions.php中链接style.css

我是WordPress的新手;我刚开始学习WordPress。我想把风格联系起来。函数中的css。php,但我无法解决这里可能存在的问题。谁能给我指出正确的方向吗?指数php<?php get_header(); ?> <?php if ( have_posts() ) { while ( have_posts() ) { the_post();