检查自定义分类术语是否已发布帖子?

时间:2013-08-14 作者:ian

我正在为客户制作杂志主题,并使用自定义的“问题”分类法。每周都有一个新的版本,我还有一个函数可以获取最新的版本。但编辑在该期文章发表前几天创建了一期新文章。我当前的函数使用max()只查找编号最高的问题:

function get_issues() {
    $output = array();
    $hlterms = get_terms(\'issue\', array(\'hide_empty\' => false));
    foreach($hlterms as $term){
         array_push($output, $term->name);
    } 
    return $output;
}
function get_current_issue() {
    $current_issue_no = max(get_issues());
    $current_issue = get_issue_by_number($current_issue_no); // Not important for question
    return $current_issue;
}
“issue”中的所有术语都是数字(如字符串),如101402等。我使用最大的数字来返回issue对象,但这在这里并不重要,因为如果我能得到正确的数字,我就可以将其传递给已经在工作的实例化函数get_issue_by_number().

那么,我如何才能知道返回的“问题”是否发布了帖子?我们的想法是get_current_issue() 函数将只返回发布者认为处于活动状态的最新版本。他们会提前创建文章,并在上传几天后给他们一个发布日期。因此,理想情况下,我可以编写一个函数,返回问题101,即使102存在,因为102没有分配给任何活动帖子。但一旦这些帖子在设定的日期激活,该功能将开始返回102。欢迎所有想法,如果有更好的方法,我很乐意改变我的方法。

下面是我希望实现的一个简单示例:

我有两个“问题”,123和124。不久前,我创建了123个网站,并为其分配了已发布的帖子。但我最近刚刚创建了124个,还没有发布的帖子。我的函数应该返回问题123,而不是124,即使124从技术上来说是最新的。第123期分配了许多已发布的帖子,而第124期则没有,这一事实将决定这一结果。然后,一旦我发布了分配给第124期的帖子,它将成为当前的一期。

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

function get_issues() {
 $output = array();
 $hlterms = get_terms(\'issue\', array(\'orderby\' => \'id\', \'order\' => \'DESC\',\'hide_empty\' => false));
 foreach($hlterms as $term){
     array_push($output, $term->term_id);
 } 
 return $output;
}
这将根据最新版本返回术语id,然后在第二个函数中开始迭代以获取最新版本的帖子。

function get_posts_for_current_issue() {
   $total_issues = get_issues();
   foreach($total_issues as $issue_id){
     $args = array(
     \'post_type\' => \'post\',
         \'status\' => \'publish\',
     \'tax_query\' => array(
          array(
        \'taxonomy\' => \'issue\',
        \'field\' => \'id\',
        \'terms\' => $issue_id
          )
           )
        );//end of args
     $current_issue_posts = get_posts($args);
     if(!is_wp_error($current_issue_posts) && count($current_issue_posts)>0){
        return $current_issue_posts; //will terminate the loop if posts found
     }
   }//end of foreach
 }//end of function
您可能需要打开WP\\u调试,因为我无法测试代码。

SO网友:stefan-mewa

我建议使用\'field\'=>\'term_id\' 而不是\'field\'=>\'id\'.关于wordpresscodex page 对于get\\u terms(),这是正确的方法,也是我在测试期间遇到的问题。

我的代码示例(用于检查term是否发布了帖子):

function check_term_posts($tax_slug, $term_id) {
    $args = array(
        \'post_type\' => \'post\',
        \'status\' => \'publish\',
        \'tax_query\' => array(
            array(
                \'taxonomy\' => $tax_slug,
                \'field\' => \'term_id\',
                \'terms\' => $term_id
            )
        )
    );
    $term_query =  new WP_Query($args);
    $term_posts_count = $term_query->found_posts;
    if( $term_posts_count>0 ){
        return true;
    } else {
        return false;
    }
}

SO网友:Flector
if (get_term($term->term_id, \'taxonomy\')->count > 0 ) {

}
结束

相关推荐