在主查询中仅显示一个类别,标签页上的问题

时间:2013-03-14 作者:Beth Blinebury

我修改了Ashfame的以下代码:

add_action(\'pre_get_posts\', \'block_cat_query\' );
function block_cat_query() {
global $wp_query;   
if( is_home() || is_search() || is_tag() ) {
    $wp_query->query_vars[\'cat\'] = \'3\';
}
}
此代码只用于在主页、搜索和标记页面上过滤类别#3中的帖子。

然而,我正在利用

<?php single_tag_title(); ?>
在我的标题中。php文件和特定标记页上,标记标题不会显示。页面将显示类别标题。这只会在这个函数存在的情况下发生,所以我想知道是否有其他方法来编写上面的函数,而不会影响<?php single_tag_title(); ?> 在标记页上。

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

如果要更正的唯一问题是single_tag_title, 通过直接获取标记查询变量,可以通过过滤器更正该值:

function wpa90852_fix_tag_title(){
    $tag = get_term_by( \'slug\', get_query_var(\'tag\'), \'post_tag\' );
    return $tag->name;
}
add_filter( \'single_tag_title\', \'wpa90852_fix_tag_title\' );

SO网友:kaiser

有很多方法for the WP_Query 你可以用来实现你的目标。如果要阻止上的类别,请执行以下操作:

home 第页Search-标签页上的结果页,然后您可以使用category__not_in.

add_filter( \'pre_get_posts\', \'wpse90852_block_cat_query\' );
function wpse90852_block_cat_query( $query )
{
    if ( is_admin() )
        return $query;

    if ( $query->is_main_query() && ( $query->is_home() || $query->is_search() || $query->is_tag() ) )
    {
        $query->set( \'category__in\', 3 );
    }

    return $query;
}

SO网友:Horttcore

首先你必须找到正确的钩子,在这里pre_get_posts. 然后你必须检查一下你是否在头版(is_front_page()) 如果您在主查询中(is_main_query). 作为$query 作为参数提供,很容易更改查询。

/**
 * WordPress Answers #90852
 *
 * @param obj $query WP_Query object
 * @return void
 * @author Ralf Hortt
 **/
function pre_get_posts_90873( $query )
{
    if ( is_front_page() && $query->is_main_query() && !is_admin() ) :
        $query->query_vars[\'cat\'] = 3;
    endif;
}
add_action(\'pre_get_posts\', \'pre_get_posts_90873\' );
附言:好的,我看看问题有没有变。我还是让她回答我的问题,以防万一有人想知道。

结束