Obtener término por meta personalizado y taxonomía
¿Cómo obtener un término por meta personalizado y taxonomía o cómo filtrar tax_query
por meta de término en lugar de slug
/id
?
function custom_pre_get_posts($query)
{
global $wp_query;
// Si no es admin, es tienda y es la consulta principal y es un archivo de tipo de post "producto"
if ( !is_admin() && is_shop() && $query->is_main_query() && is_post_type_archive( "product" ))
{
$term = ???get_term_by_meta_and_taxonomy???('custom_meta_term','my_taxonomy');
$t_id = $term['term_id'];
$tax_query = array
(
array
(
'taxonomy' => 'my_taxoomy',
'field' => 'id',
'terms' => $t_id
)
);
$query->set( 'tax_query', $tax_query );
}
}
add_action( 'pre_get_posts', 'custom_pre_get_posts' );

Prueba esto:
$args = array(
'hide_empty' => false, // también recupera términos que aún no se han utilizado
'meta_query' => array(
array(
'key' => 'feature-group',
'value' => 'kitchen',
'compare' => 'LIKE'
)
),
'taxonomy' => 'category',
);
$terms = get_terms( $args );

Esta debería ser la respuesta aceptada, ya que es la mejor práctica para este caso.

De acuerdo, lo he confirmado y esto logra recuperar un término mediante una clave y valor de metadatos de término. Asegúrate de establecer hide_empty como falso si tu término aún no tiene publicaciones asociadas.

Continuando con la respuesta de ilgıt-yıldırım mencionada anteriormente, tanto la declaración get_term_meta
como las declaraciones $key == 'meta_value'
necesitan contener $term>term_id
.
Aquí tienes un ejemplo completo que incluye la solicitud personalizada de $wp_query
:
$term_args = array( 'taxonomy' => 'tu-taxonomia' );
$terms = get_terms( $term_args );
$term_ids = array();
foreach( $terms as $term ) {
$key = get_term_meta( $term->term_id, 'clave-meta-termino', true );
if( $key == 'valor-meta-termino' ) {
// agregar el ID al array
$term_ids[] = $term->term_id;
}
}
// Argumentos del Loop
$args = array(
'post_type' => 'entradas',
'tax_query' => array(
array(
'taxonomy' => 'tu-taxonomia',
'terms' => $term_ids,
),
),
);
// La Consulta
$featured = new WP_Query( $args );

Necesitarás iterar a través de cada uno de los términos en tu condicional de consulta principal. Asumiendo que probablemente habrá más de un término con los datos personalizados, luego necesitarás pasar un array de IDs a tu tax query (consulta de taxonomía).
Por ejemplo, para iterar a través de cada término y verificar los meta personalizados:
$term_args = array(
'taxonomy' => $taxonomy_name,
);
$terms = get_terms( $term_args );
$term_ids = array();
foreach( $terms as $term ) {
$key = get_term_meta( $term->ID, 'meta_key', true );
if( $key == 'meta_value' ) {
// agregar el ID al array
$term_ids[] = $term->ID;
}
}
Finalmente obtendrás la variable $term_ids que contiene un array con los IDs de los términos que estás buscando. Puedes pasar esto a tu tax query.

get_term_meta( $term->ID, 'meta_key', true );
debería ser get_term_meta( $term->term_id, 'meta_key', true );
ya que $term
sería un objeto WP_Term
.
