显示所有未应用于帖子的标签

时间:2016-02-16 作者:Andrew Lazarus

我正在wordpress中制作一个清单——我有一个巨大的帖子列表,我想用为帖子所做的检查来标记它们。

但是,我想显示未应用于此帖子的所有标签。

例如:

<小时>

Sarah\'s Document

尚未检查的进程:ISU-123, ISU-124, ISU-125

<小时>

Andrew\'s Document

尚未检查的进程:ISU-125

我想几乎应用反向标记方法–我标记应用了流程的帖子,并在每个帖子上显示尚未标记的流程的视觉。

有没有办法使用get_the_tags 用于显示未应用的标记?或者查询所有标记并排除数组?

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

在研究了标记/术语函数之后,我成功地编写了一个函数来解决这个问题,并将其封装在一个函数中:

function tags_not_applied( ){
  // Get ID of post
  $post_id = get_the_ID();

  // Get post\'s current tags
  $tags_array = wp_get_post_terms( $post_id, \'taxonomy\', array("fields" => "ids") );
  if (empty($tags_array))
    return;

  // Put all tags into array
  $args = array(
    \'hide_empty\' => false,
    \'exclude\' => $tags_array
  );

  // Get all tags except the ones applied
  $terms = get_terms( \'taxonomy\', $args );

  if (empty($terms))
    return;

  // Create list of tags not applied
  $html = \'<ul class="tags_not_applied">\';
  foreach ( $terms as $term ) {
    $term_link = get_term_link( $term->term_id );

    $html .= "<li><a href=\'{$term_link}\' title=\'{$term->name} term\' class=\'patch patch-{$term->slug}\'>";
    $html .= "{$term->name}</a></li>";
  }
  $html .= \'</ul>\';
  echo $html;
}
需要注意的是get_terms 默认情况下hide_emptytrue, 这导致了一种假设,即没有任何东西被退回!

SO网友:Tribalpixel

如果我理解你的问题,you want all tags from a taxonomy not applied to your post?

也许你可以用get_terms(\'your_custom_taxonomy\') 获取所有标签,并解析/区分当前帖子标签,以获取未应用于帖子的所有标签https://developer.wordpress.org/reference/functions/get_terms/

或者尝试使用类似的过滤器list_term_exclusions 使用您当前的帖子https://developer.wordpress.org/reference/hooks/list_terms_exclusions/