Check if post type has term

时间:2011-03-30 作者:Andreas Olsson

我有一个自定义的帖子类型,叫做articles. 我还创建了一个名为subject. 每篇文章都有一个主题,就像帖子有类别一样。

现在是问题所在。当我在page-articles.php (page-slug.php), 它必须检查文章的主题。我怎么能这么做?!我已经上网好几天了,没有找到任何解决办法。

我的想法是,在某种程度上,我必须检查分类主题是否符合标准。例如:

if (is_term(\'news\', \'subject\'){
// do this
}
但我真的搞不懂它是怎么工作的!这个is_term 没有这样做,我也找不到任何其他函数。

4 个回复
SO网友:Gavin
if( has_term( \'jazz\', \'genre\' ) ) {
    // do something
}

http://codex.wordpress.org/Function_Reference/has_term

SO网友:Ryan

我尝试了下面的代码,效果很好--这就是你要找的吗?

<?php
    // grab your custom post type and output them all
    query_posts(\'post_type=articles&posts_per_page=-1\');

    if ( have_posts() ) : while ( have_posts() ) : the_post();

        // you can output your title, permalink, etc. anywhere within the loop

        // get all items in your custom taxonomy
        $terms = get_the_terms($post->ID, \'Subject\');

        // loop through each term and perform your check
        foreach ( $terms as $term ) {
            if($term->name == \'Term you are checking for\') {
                // do stuff here
            }
        }
    endwhile; endif;
?>
将上面的“您正在检查的术语”替换为您正在检查的主题的实际名称,而不是slug。

Edit: 我不是数据库性能方面的专家,所以不确定这是否是检索所需信息的最佳方式--我愿意听取其他人的意见。

SO网友:Chrisdigital

我自己也经历了一场有趣的斗争。

我正在使用http://codex.wordpress.org/Function_Reference/get_the_termshttp://codex.wordpress.org/Function_Reference/is_object_in_term

我必须根据分类标记的存在来显示类别标题和其他元数据。

我用is\\u object\\u in\\u术语检查了一组特定标记,得到了不可预测的结果,但我所做的可能对其他人有用。最后,我使用NULL使其正常工作,但我只需要检查是否存在分类法,以及该分类法下的任何术语是否应用于正在查看的帖子,这样我就可以呼出某些显示元素。

我假设如果你只是在寻找一个术语,那么codex页面上的股票示例应该会有所帮助。类似于。。。

if ( is_object_in_term( $post->ID, \'news\', \'subject\' ) ) :
echo \'YES\';
else :
echo \'NO\';
endif;
我的相关代码如下:

 $heading_nicename = array(\'Category\',\'Neighborhoods\',\'Zip Codes\',\'Member Agencies\',\'Nearest Public Transportation\');
 $tax_slug = array(\'category\',\'neighborhoods\',\'zip_codes\',\'member_agencies\',\'nearest_public_transportation\');
 $heading_key = 0;
 $termindex = 0;`

  foreach ( $tax_slug as $taxonomy ) {
  //used to spit out terms as links
  $object_terms = wp_get_object_terms($post->ID, $taxonomy, array(\'fields\' => \'all\'));

  //used in a check to see if tax terms even apply to post
  $o_terms = get_the_terms( $post->ID, $taxonomy );

  if ( $o_terms && ! is_wp_error( $o_terms ) ) {
    $check_these_terms = array();
  }

  foreach ( $o_terms as $term ) {
    $check_these_terms[] = $term->slug;
    //echo $term->slug.\'<br/>\';
    }

    $o_list = join( ", ", $check_these_terms );
    //echo \'taxonomy: \'.$taxonomy.\'<br/>\';
    //echo \'terms: \'.$o_list.\'<br/>\';

 //unpredictable results
 //if ( is_object_in_term( $post->ID, $taxonomy, array($o_list ) ){
    //echo \'<h4>\'.$heading_nicename[$heading_key].\'</h4>\';
    //}

 //Ends up being a check for ANY term under a taxonomy
    if ( is_object_in_term( $post->ID, $taxonomy, null ) ){
    echo \'<h4>\'.$heading_nicename[$heading_key].\'</h4>\';
    }

    $heading_key++;
    echo \'<p>\';

$endindex = count($object_terms);
$termloop = 0;
foreach ($object_terms as $term) {

  echo \'<a href="\' . esc_attr(get_term_link($term, $taxonomy)) . \'" title="\' . sprintf( __( "View all posts in %s" ), $term->name ) . \'" \' . \'>\' . $term->name.\'</a>\';
  //clean up commas
  if ($termloop !== ($endindex - 1)){
    echo \', \';
    $termloop++;
  }
  $termindex++;
}
    echo \'</p>\';

  }`

SO网友:Wyck

您是否尝试过使用wp\\u get\\u object\\u术语?

类似于

$article_subjects = wp_get_object_terms($post->ID, \'subject\');

结束

相关推荐