web-dev-qa-db-ja.com

特定の投稿タイプ内でのみ使用されている分類用語のリストを取得する方法

私はたくさんの投稿タイプにわたって共有されている 'location'と呼ばれるカスタム分類法を持っています。特定の場所の分類用語ページにユーザーがアクセスできるように、自分の場所(用語)の選択フィールドのドロップダウンリストを作成します。しかし、ある投稿タイプで使用されていて、他の投稿タイプでは使用されていない用語を除外したいと思います。

これを達成する方法はありますか?

2
unfulvio

私はプログラマではないので、これを実行するためのはるかに効率的で正しい方法がおそらくあるでしょう。

これをfunctions.phpまたはカスタムプラグインに入れてください:

function get_terms_by_post_type( $taxonomies, $post_types ) {
    global $wpdb;
    $query = $wpdb->get_results( "SELECT t.*, COUNT(*) from $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN $wpdb->term_relationships AS r ON r.term_taxonomy_id = tt.term_taxonomy_id INNER JOIN $wpdb->posts AS p ON p.ID = r.object_id WHERE p.post_type IN('".join( "', '", $post_types )."') AND tt.taxonomy IN('".join( "', '", $taxonomies )."') GROUP BY t.term_id");
    return $query;
}

function show_post_type_terms($taxonomy, $posttype = null ) {
   global $post;
   if(!isset($posttype)) $posttype = get_post_type( $post->ID );
   $terms = get_terms_by_post_type( array($taxonomy), array($posttype) );
   echo '<ul>';
   foreach($terms as $term) {
      $output = '<li><a href="'.get_bloginfo('url').'/'.$taxonomy.'/'.$term->slug.'/?post_type='.$posttype.'">'.$term->name.'</a></li>';
      echo $output;
   }
   echo '</ul>';
}

使用例

  1. 現在のカスタム投稿タイプの投稿で使用されていないすべての用語を除外し、その特定の投稿タイプの投稿のみを表示する用語アーカイブへのリンクを表示するには、<?php show_post_type_terms('taxonomy_name'); ?>をカスタム投稿タイプアーカイブテンプレートファイルに入れます。
  2. 特定のカスタム投稿タイプに対して同じことを行うには、他のテンプレートファイルに<?php show_post_type_terms('taxonomy_name', 'custom_post_type_name'); ?>を入れます。
  3. [show_post_type_terms taxonomy="taxonomy_name" posttype="post_type_name"]のように、投稿やページに直接配置できるショートコードとして機能するように調整することもできます。あなたがこれのためのコードを探しているなら私に知らせてください。

this から変更しました。 ( this のため、$ wpdb-> prepareは$ wpdb-> get_resultsに変更されました)

2
user34682