验证帖子上是否使用了标签

时间:2011-10-24 作者:Zach Shallbetter

我正在将站点标记用于词汇表。如果标签存在,我想显示标签页的链接,否则只显示标签标题。是否有检查允许我确定标签是否已标记在帖子上?

    $tags = get_tags( array( \'hide_empty\' => false ) );
    if ($tags) {
      foreach ($tags as $tag) {
        if ($tag->description) {
          echo \'<dt style="display:inline; float:left; padding-right:5px;"><strong><a href="\' . get_tag_link( $tag->term_id ) . \'" title="\' . sprintf( __( "View all posts in %s" ), $tag->name ) . \'" \' . \' style="text-decoration:none;">\' . $tag->name.\'</a></strong></dt><dd style="margin-bottom:20px;">\' . $tag->description . \'</dd>\';
        }
      }
    }
(工作)根据Chip的建议进行更新

    $tags = get_tags( array( \'hide_empty\' => false ) );
    if ($tags) {
      foreach ($tags as $tag) {
        if ($tag->description) {
          echo \'<dt style="display:inline; float:left; padding-right:5px;"><strong>\';
              if ( 0 < $tag->count ){
                echo \'<a href="\' . get_tag_link( $tag->term_id ) . \'" title="\' . sprintf( __( "View all posts in %s" ), $tag->name ) . \'" \' . \' style="text-decoration:none;">\' . $tag->name.\'</a>\';
              } else {
                echo $tag->name;
              }
          echo \'</strong></dt><dd style="margin-bottom:20px;">\' . $tag->description . \'</dd>\';
        }
      }
    }
最终结果示例http://i.imgur.com/aFs6z.png

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

尝试使用has_tag() 条件模板标记。e、 例如,要查询标记“foobar”:

<?php
if ( has_tag( \'foobar\' ) ) {
    // The current post has the tag "foobar";
    // do something
} else {
    // The current post DOES NOT have the tag "foobar";
    // do something else
}
?>
如果您在循环中,只需调用<?php has_tag( $tag ); ?>; 如果您在循环之外,则需要传递post ID:<?php has_tag( $tag, $post ); ?>

因此,近似您的代码:

$tags = get_tags( array( \'hide_empty\' => false ) );
if ( $tags ) {
    foreach ( $tags as $tag ) {
        if ( has_tag( $tag->slug ) ) {
            // Current post has $tag;
            // output the tag link
            echo \'<dt style="display:inline; float:left; padding-right:5px;"><strong><a href="\' . get_tag_link( $tag->term_id ) . \'" title="\' . sprintf( __( "View all posts in %s" ), $tag->name ) . \'" \' . \' style="text-decoration:none;">\' . $tag->name.\'</a></strong></dt><dd style="margin-bottom:20px;">\' . $tag->description . \'</dd>\';
        } else {
            // Current post does NOT have the tag;
            // output just the tag name
            echo $tag->name;
        }
    }
}

EDIT

因此,另一种想法是:如果您从任意的术语列表中提取,并且您想确定该术语是否用作post标记,那么您可以尝试使用term_exists() 有条件的e、 g.如果您想知道“foobar”是否用作post标记:

<?php 
if ( term_exists( \'foobar\', \'post_tag\' ) ) {
    // The term \'foobar\' is used as a post tag;
    // do something
}
?>
但我仍然对你这里“标签”的来源感到困惑。

EDIT 2

因此,现在我们将根据tag count 大于零(即标签已在至少一个立柱上使用):

    $tags = get_tags( array( \'hide_empty\' => false ) );
    if ($tags) {
      foreach ($tags as $tag) {
        if ( 0 < $tag->count ) {
          echo \'<dt style="display:inline; float:left; padding-right:5px;"><strong>\';
              if ( has_tag( $tag->slug ) ) {
                echo \'<a href="\' . get_tag_link( $tag->term_id ) . \'" title="\' . sprintf( __( "View all posts in %s" ), $tag->name ) . \'" \' . \' style="text-decoration:none;">\' . $tag->name.\'</a>\';
              } else {
                echo $tag->name;
              }
          echo \'</strong></dt><dd style="margin-bottom:20px;">\' . $tag->description . \'</dd>\';
        }
      }
    }

SO网友:Bainternet

您可以使用从返回的count字段get_tags 要检查它是否有帖子,请执行以下操作:

$tags = get_tags( array( \'hide_empty\' => false ) );
if ($tags) {
    foreach ($tags as $tag) {
        echo \'<dt style="display:inline; float:left; padding-right:5px;"><strong>\';
        //check tag count
        if($tag->count > 0){
            //its used on posts
            if ($tag->description) {
                echo \'<a href="\' . get_tag_link( $tag->term_id ) . \'" title="\' . sprintf( __( "View all posts in %s" ), $tag->name ) . \'" \' . \' style="text-decoration:none;">\' . $tag->name.\'</a></strong></dt><dd style="margin-bottom:20px;">\' . $tag->description . \'</dd>\';
            }else{
                echo \'<a href="\' . get_tag_link( $tag->term_id ) . \'" title="\' . sprintf( __( "View all posts in %s" ), $tag->name ) . \'" \' . \' style="text-decoration:none;">\' . $tag->name.\'</a></strong></dt>\';
            }
        }else{
            //no posts
            echo $tag->name;
            if ($tag->description)
                echo \'<dd style="margin-bottom:20px;">\' . $tag->description . \'</dd>\';
        }
    }
}

结束

相关推荐

Query Posts Creates 404 Error

当我在档案页面时,我使用下面的代码来查询帖子。在我的主题选项to\\u count\\u home中调用帖子的数量。WordPress没有根据每页的posts\\u生成正确的页数。相反,它是根据我在默认WordPress设置中选择的每页帖子数生成页面。例如,如果我在设置中每页有10篇文章,那么在代码中将posts\\u per\\u page设置为5,当我转到第二页(应该有5篇文章)时,我会收到404错误。下面是我使用的代码:<?php $per_page = get_option(\'to