it-swarm-ja.com

wp_set_object_termsはREVISIONとの関係を築きますか?

カスタムの投稿タイプ、「アルバム」があります。それは分類法、 'album_artist'です。私は、save_postにフックされた関数の中でwp_set_object_termsを使用して、その分類法にアーティストをプログラム的に追加しようとしています。

function get_album_data($post_id) {
    // CODE REMOVED FOR BREVITY: IMPORT DATA FROM EXTERNAL SOURCE, PARSE VARS
    wp_set_object_terms( $post_id, $album_artist_name, 'album_artist', true );
    update_post_meta ($post_id, 'Release Date', $release);
}
add_action( 'save_post', 'get_album_data', 1001 );

私は、コンピレーションアルバムに複数のアーティストがいる場合に「true」を使用しています(「21 Original Hits 21 Original Stars」と考えてください)。

DBのwp_terms、wp_term_relationships、およびwp_term_taxonomyテーブルを調べてみると、次のようになります。

  • Wp_termsでは、用語は正しいスラッグで正しく作成されています(すなわち、 "The Police"は警察のスラッグを取得し、term_idは482です)。
  • Wp_term_taxonomyでは、用語は正しい分類法の下に表示されています(すなわち、term_taxonomy_id 506は、album_artistの分類法でterm_id 482を持っています)。
  • Wp_term_relationshipsでは、term_taxonomy_id 506はobject_id 2448で表示されます

よさそうですね。悲しいことに、いいえ。 object_id 2448はPOST 2448を参照するため、これは実際には2447の改訂です。また、wp_postmetaテーブルをチェックすると、 'release_date'メタは2448ではなく2447で更新されています。

そのためWPは間違った投稿との関係を築いているようです。だからこそ、私は「Artist」メタボックスに入って「The Police」と書かれたチェックボックスをクリックしても、アーティストがアルバムページに表示されないのではないかと思います。

それでも、update_post_metaとwp_set_object_termsでは、$ post_id変数の扱いが異なるようです。 2つのステートメントは文字通り関数内で互いに隣接しているので、$ post_id変数は関数ごとに意味が異なります。

改訂ではなく、WPに用語とPARENTの間の関係を強制するにはどうすればよいですか。

3
Neil

wp_is_post_revision() 関数がpostがリビジョンでない場合はfalseを与える(この場合は通常どおり動作する)または実際に使用するポストIDを使用するリビジョン.

1
Rarst