Consultar múltiples taxonomías
Tengo una función configurada para mostrar 'Productos Similares', es decir, mostrar productos que comparten el mismo término de taxonomía products-category
. Esto funciona muy bien pero quiero refinar aún más la función y hacerla más específica. Por lo tanto, quiero que examine 2 taxonomías (product-category
y space
) para encontrar productos similares. El código actual es el siguiente:
<?php
$terms = wp_get_post_terms( $post->ID, 'products-category' );
if($terms){
// el post tiene términos course_type adjuntos
$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, //los términos de taxonomía que me gustaría consultar dinámicamente
),
),
'orderby' => 'title',
'order' => 'ASC',
)
);
if ( have_posts() ): ?>
<?php while (have_posts() ) : the_post(); ?> //etc...
Entonces actualmente solo mira la taxonomía products-category
para productos similares (posts), pero quiero que mire AMBAS taxonomías product-category
y space
para mostrar productos similares más específicos, si es posible. ¡Cualquier sugerencia sería muy apreciada!

Primero que nada, obtén todos los slugs de términos de la taxonomía personalizada space
mediante el ID de la entrada actual.
$space_terms = wp_get_post_terms( $post->ID, 'space' );
if( $space_terms ) {
$space_terms = array();
foreach( $space_terms as $term ) {
$space_terms[] = $term->slug;
}
}
Debes especificar la relación lógica entre cada arreglo de taxonomía interna cuando haya más de una.
La clave relation
en el arreglo describe la relación. Los valores posibles son OR
y AND
.
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'products-category',
'field' => 'slug',
'terms' => $course_terms,
),
array(
'taxonomy' => 'space',
'field' => 'slug',
'terms' => $space_terms,
),
),

Primero obtén todos los términos: Aquí utilicé como ejemplo el tipo de entrada personalizada "property" (propiedad)
$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' ));
Usa relation
[OR] o [AND] para obtener las publicaciones deseadas.
$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,
),
),
));
