0

WordPress のカスタム「サブタクソノミー」に投稿をリンクするにはどうすればよいですか? 「サブタクソノミー」が意味することは、例でよりよく説明されています。

  1. 投稿にリンクされた「映画」というカスタム分類法を作成しました (つまり、投稿を書くときに、関連する映画をカテゴリなどから選択します)。
  2. どの投稿タイプにもリンクされていない、「ジャンル」という「サブタクソノミー」を作成しました
  3. 「映画」を作成するときに選択可能なオプションとして「ジャンル」分類法を追加するために、いくつかのサードパーティ コードを利用して分類法に追加のフィールドを追加しました (つまり、ジャンルは映画にリンクされます)。ここでの目標は、投稿編集者が各投稿で映画とジャンルの両方を選択する必要がないようにする (そして、毎回異なる選択肢を誤って選択する可能性がある) ことなく、映画を選択するとその映画のジャンルが自動的に参照されるようにすることです。
  4. これはすべて機能しますが、公開される新しい投稿を作成して、映画とジャンルの両方への参照を自動的に作成する方法がわかりません (つまり、/movies/the-hangover/ は投稿を一覧表示しますが、/genre/コメディ / しません)

ジャンルの参照をterm_relationshipsテーブルに手動で追加し、投稿数(およびおそらく他の場所?)を更新するには、何らかのコールバックを実装する必要があると思いますが、その方法がわかりません.

...または、ジャンルを映画にリンクするというこの課題全体を解決するためのより良い方法はありますか?

ありがとう!

4

1 に答える 1

0

ソリューションの正しいパスを提供してくれた@NikolaIvanovNokolovに感謝します!

// Add action hook to link genre to movie selection
add_action('save_post', 'save_genre');

// Action hook to link Genre taxonomy to the post
function save_genre($post_id) {
    // Remove reference to any old genres
    wp_set_post_terms($post_id, NULL, 'genre');

    // Add genre reference
    $movie_ids = get_the_terms($post_id, 'movie');
    if ($movie_ids && !is_wp_error($movie_ids)) {
        foreach ($movie_ids as $movie_id) {
            $genre_slug = get_tax_meta($movie_id, 'movie_tags_genre');
            if ($genre_slug) {
                $genre = get_term_by('slug', $genre_slug, 'genre');
                wp_set_post_terms($post_id, $genre->term_id, 'genre');
            }
        }
    }
}
于 2012-12-20T22:27:42.440 に答える