Obtener término por meta personalizado y taxonomía

1 jul 2016, 19:18:44
Vistas: 45K
Votos: 8

¿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' );
0
Todas las respuestas a la pregunta 3
3
23

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 );
5 sept 2017 13:45:47
Comentarios

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

Jeremy Jeremy
25 abr 2019 17:39:01

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.

Chris Stage Chris Stage
29 ene 2020 17:42:49

También creo que esta debería ser la respuesta aceptada para este caso

Tami Tami
2 ago 2023 01:48:04
0

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 );
26 oct 2018 21:51:53
2

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.

2 jul 2016 08:21:16
Comentarios

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.

Ilgıt Yıldırım Ilgıt Yıldırım
25 ago 2017 13:11:14

Para cualquier recién llegado, esto es muy ineficiente y se consideraría la última opción. Consulta la respuesta con meta_query ya que ese es el mejor enfoque.

Jeremy Jeremy
25 abr 2019 17:38:22