web-dev-qa-db-ja.com

投稿IDから用語を取得するためのカスタムクエリ

私は与えられた投稿IDによって用語オブジェクトを取得したいです。私はsqlについてあまり知りません、そしてこのちょっと私にとって複雑です。これが私が試したものです:

global $wpdb;
$taxonomy = 'category'
$term= $wpdb->prefix.'terms';
$relations= $wpdb->prefix.'term_relationships';
$taxo = $wpdb->prefix.'term_taxonomy';
$sql = "SELECT $term.*, $relations.*, $taxo.* 
            FROM $term
                JOIN $relations 
                    ON $term.term_id = '$taxo.term_id'
                JOIN $taxo 
                    ON $relations.term_taxonomy_id = $taxo.term_taxonomy_id
            WHERE $taxo.taxonomy = '$taxonomy' AND $relations.object_id IN (116,118) 
            GROUP BY $term.term_id";
$values = $wpdb->get_results($sql, ARRAY_A);

何が悪いのかわからない。うまくいかない。

2
dev-jim

Wordpressにすでに機能を果たす機能がある場合は、カスタムSQLクエリを利用することはお勧めできません。

これを達成するために、あなたは単に wp_get_object_terms() を利用することができます。最初のパラメータ$object_idsは、文字列またはオブジェクトIDの配列を取ります。あなたのケースでは、あなたはあなたの投稿IDの配列を利用することができます。これは与えられた投稿に関連するすべての用語を検索します。

これが例です

$terms = wp_get_object_terms( array(394,530),  'category' );
if ( ! empty( $terms ) ) {
    if ( ! is_wp_error( $terms ) ) {
        foreach( $terms as $term ) {
            ?><pre><?php var_dump($term); ?></pre><?php 
        }
    }
}

これにより、次のような出力が得られます。

object(stdClass)#494 (10) {
  ["term_id"]=>
  int(115)
  ["name"]=>
  string(8) "child-01"
  ["slug"]=>
  string(7) "child01"
  ["term_group"]=>
  int(0)
  ["term_taxonomy_id"]=>
  int(115)
  ["taxonomy"]=>
  string(8) "category"
  ["description"]=>
  string(0) ""
  ["parent"]=>
  int(21)
  ["count"]=>
  int(2)
  ["filter"]=>
  string(3) "raw"
}
2
Pieter Goosen