私は、「類似の商品」、つまり同じproducts-category
分類学用語を共有する商品を表示するように設定された機能を持っています。これはうまく機能しますが、機能をさらに絞り込み、より具体的にしたいと思います。そのため、2つの分類法(product-category
とspace
)を調べて類似の製品を見つけたいと思います。現在のマークアップは次のとおりです。
<?php
$terms = wp_get_post_terms( $post->ID, 'products-category' );
if($terms){
// post has course_type terms attached
$course_terms = array();
foreach ($terms as $term){
$course_terms[] = $term->slug;
}
$original_query = $wp_query;
$wp_query = null;
$wp_query = new WP_Query(
array(
'posts_per_page' => '4',
'post_type' => 'regularproducts',
'tax_query' => array(
array(
'taxonomy' => 'products-category',
'field' => 'slug',
'terms' => $course_terms, //the taxonomy terms I'd like to dynamically query
),
),
'orderby' => 'title',
'order' => 'ASC',
)
);
if ( have_posts() ): ?>
<?php while (have_posts() ) : the_post(); ?> //etc...
そのため、現在は類似製品(投稿)のproducts-category
分類法のみを検討していますが、可能であれば、より具体的な類似製品を表示するには両方のproduct-category
とspace
を検討する必要があります。任意の提案は大歓迎です!
まず最初に、現在の投稿IDによるカスタム分類法space
からすべてのタームスラッグを取得します。
$space_terms = wp_get_post_terms( $post->ID, 'space' );
if( $space_terms ) {
$space_terms = array();
foreach( $space_terms as $term ) {
$space_terms[] = $term->slug;
}
}
複数の場合は、各内部分類法配列間の論理的な関係を指定する必要があります。
配列内のrelation
キーは関係を記述します。可能な値はOR
とAND
です。
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'products-category',
'field' => 'slug',
'terms' => $course_terms,
),
array(
'taxonomy' => 'space',
'field' => 'slug',
'terms' => $space_terms,
),
),
単純にすべての用語を最初に取得する: ここでは、たとえばプロパティのカスタム投稿タイプを使用します
$property_statu_terms = wp_get_post_terms( $post->ID, 'property_status', array( 'fields' => 'ids' ));
$property_type_terms = wp_get_post_terms( $post->ID, 'property_type', array( 'fields' => 'ids' ));
$property_city_terms = wp_get_post_terms( $post->ID, 'property_city', array( 'fields' => 'ids' ));
$property_state_terms = wp_get_post_terms( $post->ID, 'property_state', array( 'fields' => 'ids' ));
$property_feature_terms = wp_get_post_terms( $post->ID, 'property_feature', array( 'fields' => 'ids' ));
希望の投稿を取得するには、relation
[OR]または[AND] を使用します。
$query = new WP_Query( array(
'post_type' => 'property',
'posts_per_page' => 3,
'orderby' => 'Rand',
'post__not_in' => array( $post->ID ),
'ignore_sticky_posts' => 1,
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'property_status',
'field' => 'id',
'terms' => $property_statu_terms,
),
array(
'taxonomy' => 'property_type',
'field' => 'id',
'terms' => $property_type_terms,
),
array(
'taxonomy' => 'property_city',
'field' => 'id',
'terms' => $property_city_terms,
),
array(
'taxonomy' => 'property_state',
'field' => 'id',
'terms' => $property_state_terms,
),
array(
'taxonomy' => 'property_feature',
'field' => 'id',
'terms' => $property_feature_terms,
),
),
));