如何仅显示分配给特定独立子类别的帖子

时间:2015-04-13 作者:Pea_Tear_Griffin

我正在尝试建立我的wp网站,在那里我使用分配给类别和子类别(大约3个级别)的帖子。我有一个一级分类列表作为我的主菜单。单击时,预期的行为是将您带到一个级别2子类别登录页,该登录页上有一个分配给该子类别的简介帖子和一个指向第三级子类别的链接列表。单击其中一个链接后,您将进入第三级分类页面,该页面显示分配给该第三级子分类的所有帖子。

E、 g.any\\u页面。php

主菜单-类别:[Cars], 卡车、火车、船只

类别。php

第2级-Cars Category 登录页:Cars Intro Post(分配给Cars cat),然后是Cars子类别的标题链接列表:[Ford], 丰田、日产、三菱

类别。php

三级-Ford SubCategory 分配给福特子类别的PostsPosts:F250、野马、猎鹰。

我在网上搜索了几个星期,想看看如何做到这一点,但在帖子(不是页面)上找不到真正做到这一点的东西。有些文章在某种程度上触及了这一点,但在这些例子中,链接和帖子通常不会孤立于它们所链接的子类别,您还可以获得分配给子类别和/或父类别/子类别的链接和帖子。

我对wordpress和PHP有点在行,所以任何帮助都会很好!

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

我们可以通过映射category_name 查询变量(从pretty permalinks设置)到category__in (忽略子类别):

function wpse_184127_ignore_category_children( $wp_query ) {
    if ( $wp_query->is_main_query() && $wp_query->is_category() && $name = $wp_query->get( \'category_name\' ) ) {
        if ( $term = get_term_by( \'slug\', sanitize_title_for_query( $name ), \'category\' ) ) {
            if ( $term->parent )
                $depth = count( get_ancestors( $term->term_id, \'category\', \'taxonomy\' ) );
            else
                $depth = 0;

            if ( $depth <= 1 ) {
                $wp_query->set( \'category__in\', array( $term->term_id ) );
                unset( $wp_query->query_vars[\'category_name\'] );
            }  
        }
    }
}

add_action( \'pre_get_posts\', \'wpse_184127_ignore_category_children\' );
Update: 增加了深度检查。只要换一下$depth <= 1 到你需要的任何表达。目前,它只会忽略顶级和一级类别的子级(即深度小于或等于1)。

结束

相关推荐

Parent and child categories

下面是a的一部分WP_Query 环我有两个父类别ABC和12,每个都有几个子类别。在第一个td 我想让ABC儿童频道的slug类和12个儿童频道的slug类。该职位可能属于两个子类别之一,或同时属于两个子类别。一个来自ABC,一个来自12,或者一个来自ABC,一个来自12。$inCat = get_the_category(get_the_ID()); echo \"<td>\".(!empty($inCat[0]->slug) ? $inCat[0]->slu