Get categories without post

时间:2013-05-17 作者:Andy

我想得到没有帖子的类别。下面是使用post获取类别的sql。。

SELECT terms.term_id,terms.name,COUNT(post.ID) FROM wp_posts as post
JOIN wp_term_relationships as rel ON post.ID = rel.object_ID 
JOIN wp_term_taxonomy as ttax ON rel.term_taxonomy_id = ttax.term_taxonomy_id
JOIN wp_terms as terms ON ttax.term_id = terms.term_id
WHERE ( ttax.taxonomy=\'category\' AND post.post_type=\'post\' AND post.post_status != \'revision\') GROUP BY (terms.term_id)    
但是如何在没有帖子的情况下得到catgeory呢?谢谢你的帮助。

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

Here is how you can list the empty cat\'s
这种方式还可以引用每个类别的数据,如ID、名称等

$args = array(
    \'hide_empty\' => 0,
    \'pad_counts\' => true
);
$categories = get_categories( $args );
foreach($categories as $category) {

    if($category->count == 0) {
        echo $category->name."<br />";
    } else {
        // do nothing
    }

}

SO网友:birgire

您可以尝试获取空类别:

$args = array( \'hide_empty\' => 1, \'hierarchical\' => 0 );

add_filter( \'terms_clauses\', \'custom_terms_clauses_wpse_99783\' );   
$emptycats = get_terms( \'category\', $args );
remove_filter( \'terms_clauses\', \'custom_terms_clauses_wpse_99783\' );    
在哪里

function custom_terms_clauses_wpse_99783( $clauses ){
    $clauses[\'where\'] = str_replace( \'tt.count > 0\', \'tt.count = 0\', $clauses[\'where\'] );
    return $clauses;
}
这些输入参数的目的是:

    if ( $hide_empty && !$hierarchical )
            $where .= \' AND tt.count > 0\';
在函数定义中get_terms, 所以我们可以做替换。

结束

相关推荐

在Get_Categories中添加多个“Parent”

我使用下面提到的代码从父类别中获取前5个子类别(按帖子数量)。The code works fine, 然而,我需要添加更多的“父”类别,这样我就无法从多个父类别中获得前5个子类别的总数。Adding \'parent\' => \'599,588,590\', **Does not work.** The working code for single parent category.<?php $args=array( \'orderby\' => \'