通过 ID 从某个 post 获取 WordPress 标签?

Get WordPress tags from a certain post by its ID?

我到处找遍了API。我想出的只是通过 TAG 获取 POSTS 的方法,而不是通过其 ID 获取 SPECIFIC post 的 TAGS。

我想做的很简单——我有一个 post,我想检查它是否有一个特定的标签——'specialtag'——然后在那个页面上做一些事情,如果它有这个标签。似乎没有什么能指出我正确的方向。有什么我没看到的吗?

get_the_tags 将获取特定 post 的所有标签。它可以将一个 post ID 作为在循环外使用的参数:

https://codex.wordpress.org/Function_Reference/get_the_tags

如果您只想确定 post 是否具有特定标签,您可以使用 has_tag:

https://codex.wordpress.org/Function_Reference/has_tag

if( has_tag($tag_slug_or_id, $post_id_or_object) ) {
    //...
}

很简单,你可以像这样使用get_the_tags函数:

CODEX: The function return an array of objects, one object for each tag assigned to the post.

示例 1:

如果您有 post ID,您可以通过此代码

检索与 post 关联的标签
$postid = $post->ID; 
get_the_tags($postid);

示例 2:

在循环

中检索与 post 关联的标签
$posttags = get_the_tags();
if ($posttags) {
  foreach($posttags as $tag) {
    echo $tag->name . ' '; 
  }
}

循环中使用此函数,则无需传递ID

示例 3:

在循环外检索与 post 关联的标签

global $post;
   foreach(get_the_tags($post->ID) as $tag) {
      echo $tag->name . ', ';
   }

如果您需要通过 post id 获取标签,您可以使用以下函数。这将适用于任何地方,因为该方法基于数​​据库查询。

function sc_tf_get_tags_as_array($post_id){
    global $wpdb;
    $tbl_terms = $wpdb->prefix . "terms";
    $tbl_term_relationships = $wpdb->prefix . "term_relationships";

    $sql = "SELECT name FROM $tbl_terms WHERE term_id in (SELECT term_taxonomy_id FROM $tbl_term_relationships WHERE object_id='$post_id');";
    $results = $wpdb->get_results($sql);

    if($results){
        foreach($results as $row){
            $tags_list[] = $row->name;
        }
    }

    return $tags_list;
}