从循环、查询、小工具、帖子导航中排除类别

时间:2014-05-17 作者:glueckpress

我最近遇到了一个用例,需要防止某个类别显示在前端。具体而言,我需要将分配给该类别的职位从

主查询(“循环”)搜索查询类别查询存档查询后导航(next/prev_post_link())和类别名称本身不会显示为

  • the_category() 在主题模板中的类别小部件(列表和下拉列表)中,我很快发现自己正在进行一项任务,我想在这里分享其结果,并获得进一步的反馈。

1 个回复
SO网友:glueckpress

排除具有的类别pre_get_posts()

我发现通过pre_get_posts()set_query_var() 除了小部件,其他都可以。最近发布的小部件仅在使用时排除类别$query->set() 相反

<?php
/**
 * Does NOT apply to the Recent Posts widget. 
 */
function glck1403271109_exclude_categories( $query ) {

    $excluded = array( \'1\', \'2\' );

    if( ! is_admin() )
        set_query_var( \'category__not_in\', $excluded );
}    
add_filter( \'pre_get_posts\', \'glck1403271109_exclude_categories\' );


/**
 * Does apply to the Recent Posts widget. 
 */
function glck1403271122_exclude_categories( $query ) {

    $excluded = array( \'1\', \'2\' );

    if( ! is_admin() )
        $query->set( \'category__not_in\', $excluded );
}
add_filter( \'pre_get_posts\', \'glck1403271122_exclude_categories\' );
排除查询和小部件中的类别需要我将几个功能打包到一个迷你插件中。代码可以在Gist here.

从后期导航中排除类别(next/prev_post_link())

next/prev_post_link() 以及它们的基础get_ 所有功能都依赖于get_adjacent_post() 到目前为止(WordPress 3.9.1)还没有使用WP-Query, 但修复了它自己的SQL查询。Trac Ticket #26937 旨在获得get_adjacent_post() 使用WP_Query, 但我们可能需要一段时间才能到达那里。

从中排除类别next/prev_post_link() 在我的例子中,通过将要排除的类别ID直接传递给函数就可以充分实现。我相信这也可能是由于插件与get_adjacent_post() 直接地这是我对模板标签的看法。正在检查glckprss_exclude_categories__category_names() 当然,前面提到的迷你插件只有在使用后者时才有意义。

<?php
/**
 * Exclude categories from prev/next post links.
 *
 * $exclude  (array) - category slugs to retrieve IDs from
 * $excluded (array) - category IDs to be excluded
 */
$exclude  = array();
$excluded = array();

// Mini plugin active?
if( function_exists( \'glckprss_exclude_categories__category_names\' ) ) {

    $exclude = glckprss_exclude_categories__category_names();

else {

    $exclude  = array(
            get_category_by_slug( \'my-category\' ),
            get_category_by_slug( \'my-other-category\' )
            );
}

// Retrieve IDs
foreach( $exclude as $category ) {

    if( $category )
        $excluded[] = absint( $category->term_id );
}

/* Next Post */
next_post_link( \'%link\', \'%title\', false, $excluded );

/* Previous post */
previous_post_link( \'%link\', \'%title\', false, $excluded );
菜单对于我的用例来说,没有必要从菜单中排除类别,因为我只有自定义菜单,所以我没有朝这个方向进行研究。我很确定pre_get_posts() 但对菜单项很有把握,不是吗?

感谢您阅读所有这些,感谢您的评论!

结束

相关推荐

使用Get_Categories显示类别的图像,或显示任何子帖子中的图像

我正在使用get\\u categories列出父类别的子类别。我想使用get\\u categories输出将图像添加到子类别。我可以从我正在使用get\\u categories的类别的子类别(即父类别的子类别)的任何帖子中获取特色图像。我不想显示任何其他孙儿信息,只想从每组类别的孩子中获得一张特色图片我当前使用的代码是$args = array(\'child_of\' => 1 ); $categories = get_categories($args); forea