检查自定义帖子类型类别中是否存在帖子,在循环之外

时间:2013-02-14 作者:RCNeil

我正在主循环之外构建一个导航,其中包括下拉菜单。我有一个名为“事件”的自定义帖子类型,它有自己的类别。我想有一个下拉列表,如果有自定义的帖子类型和类别内的帖子,但我不知道我应该使用什么功能来确定这一点。。。

我有。。。

$hasposts = get_posts(\'post_type=Events&category=40\');
if($hasposts) {
    ..// show the drop down menu
} 
我应该使用get_posts()? 我返回的所有内容都有一个空数组,但我知道其中一些类别包括帖子。。。

非常感谢,WA。

4 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

归根结底,这一切都归结为WP\\U查询,即使您使用get\\U帖子,下面是我的修改版本:

$hasposts = get_posts(\'post_type=sc-events&category=40\');
if( !empty ( $hasposts ) ) {
    ..// show the drop down menu
}

$query = new WP_Query(array(
    \'post_type\' => \'sc-events\',
    \'category\' => 40
));
if( $query->have_posts() ){
    echo \'we have posts\';
} else {
    echo \'no posts found\';
}
虽然这会起作用,但有一个受您自己答案启发的替代方案,它使用类别slug而不是其ID:

$term = get_term_by(\'name\', \'whatever category 40 is called\', \'category\');
if($term != false ){
    if($term->count > 0 ){
        // we have posts
    }
}

SO网友:Tomas Buteler

如果您想拥有一个数组,其中包含自定义分类法中的所有术语,并附带至少在post中包含这些术语的附加条件,那么这就是您要寻找的函数:

get_terms(
    \'group\',
    array(
        \'hide_empty\' => true
    )
);
这将检索有关terms, 不是帖子本身。对于这种情况下的帖子,您唯一知道的是它们存在于这些术语中,而不是其他术语。如果下拉菜单将显示有关帖子的某种信息,那么您可能需要除上述内容之外的其他内容。否则get_terms 是您正在寻找的函数。

SO网友:RCNeil

我能够通过以下代码执行此条件检查-

if (get_category(\'40\')->category_count > 0) {
    ..//show the drop down
}

SO网友:WPExplorer

没有理由返回完整的get\\u posts对象通过使用fields参数返回ID的

$posts = get_posts( array(
    \'post_type\' => \'Events\',
    \'posts_per_page\' => 1,
    \'fields\' => \'ids\',
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'category\',
            \'field\'    => \'term_id\',
            \'terms\'    => array( \'40\' )
        ),
    ),
) );
if ( ! empty ( $posts ) ) {
    ..// show the drop down menu
}

结束

相关推荐