wpbeginner.com からのチュートリアルに基づいて、私のテーマのための "Related posts"セクションを作成しています。投稿を選択する際に、category__in
を使用して同じカテゴリに属するものと、tag__in
を使用して同じタグを持つものの2つの選択肢がありました。
もしそうなら、それらを一つの大きなミキシングポットに入れて、それらすべてから投稿を選択することは可能ですか?同じカテゴリと同じタグを持つものではなく、またはのどちらかを持つものを意味します。
はい、それは可能です。 Taxonomies はすべて、wp_term_taxonomy
テーブルのdbに格納されています。以下はすべて分類法としてリストされています
カテゴリー
post_tag
link_category
post_formatと
カスタム分類法
これらの分類法に属するすべての用語はwp_terms
テーブルに格納されています。タグはpost_tag
分類法の用語であり、投稿メニュー画面の「カテゴリ」の下に作成したすべての「カテゴリ」は実際には分類法の用語ですcategory
これにより、さまざまな分類法や用語を1つのクエリにまとめることが簡単になります。これを実現するには、 WP_Query
の分類パラメーターを使用して、カスタムのtax_query
を実行します。
それではまず、投稿に属するすべてのカテゴリとタグのリストを取得する必要があります。カテゴリには get_the_category
を使い、タグには get_the_tags
を使います。あなたはそれをあなたのカスタムクエリで使うつもりの配列として返すつもりです。
global $post;
//get the categories a post belongs to
$cats = get_the_category($post->ID);
$cat_array = array();
foreach($cats as $key1 => $cat) {
$cat_array[$key1] = $cat->slug;
}
//get the categories a post belongs to
$tags = get_the_tags($post->ID);
$tag_array = array();
foreach($tags as $key2 => $tag) {
$tag_array[$key2] = $tag->slug;
}
これがカスタムクエリーの引数です。私が提供したWP_query
へのリンクで分類パラメータを調べてみることができます。また、WP_query
に置き換えられたcaller_get_posts
のように、このチュートリアルの一部のパラメーターは昔から非推奨になっているので、ignore_sticky_posts
で使用できるすべてのパラメーターも調べてみてください
$args = array(
'posts_per_page' => 5,
'orderby' => 'Rand',
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => $cat_array,
'include_children' => false
),
array(
'taxonomy' => 'post_tag',
'field' => 'slug',
'terms' => $tag_array,
)
)
);
$the_query = new WP_Query( $args );
あなたはコードをいじって行き、望むように修正することができます。