Consultar entradas por ID de taxonomía personalizada

7 oct 2011, 16:06:24
Vistas: 47.7K
Votos: 8

Tengo un tipo de entrada personalizada llamado portfolio y una taxonomía personalizada llamada build-type (actuando como categorías)

Estoy tratando de consultar entradas de portfolio por ID de build-type, por ejemplo, todas las entradas de Portfolio en "Hoteles" (id=4 para esa taxonomía)

// obtiene el ID desde un campo personalizado para mostrar entradas en una página específica
$buildType = get_post_meta($post->ID, 'build_type_id', true);
// ejecutar consulta
query_posts(array( 
    'post_type' => 'portfolio',
    'showposts' => -1,
    'tax_query' => array(
        'taxonomy' => 'build-type',
        'terms' => $buildType,
        'field' => 'term_id'
    ),
    'orderby' => 'title',
    'order' => 'ASC'
));

Actualmente está llamando a todas las entradas de portfolio y no solo a aquellas con el ID de build-type

Para 'field' => 'term_id' ¿debería usar term_id, tag_ID, id u otro valor?

¿Alguien sabe cómo hacer que esto funcione?

¡Gracias de antemano!

0
Todas las respuestas a la pregunta 4
2
14

La razón por la que esto no funciona es porque 'tax_query' necesita ser un array de arrays (confuso, lo sé).

...

'tax_query' => array(
    array(
        'taxonomy' => 'build-type',

...

Es así para que puedas agrupar varias reglas diferentes juntas.

7 oct 2011 19:00:40
Comentarios

Buen trabajo Drew. Eso lo resolvió. Publiqué el script final en Github https://gist.github.com/1275191

mattberridge mattberridge
10 oct 2011 15:36:04

¡Saludos! Pasé una hora del presupuesto del cliente resolviendo este pequeño problema :)

Tom Tom
9 ene 2017 17:34:10
3

Drew tenía razón, tax-query necesita ser un array de arrays

La solución final es:

// obtiene el ID de un campo personalizado para mostrar posts en una página específica
$buildType = get_post_meta($post->ID, 'build_type_id', true);
// ejecuta la consulta
query_posts(array( 
    'post_type' => 'portfolio',
    'showposts' => -1,
    'tax_query' => array(
        array(
            'taxonomy' => 'build-type',
            'terms' => $buildType,
            'field' => 'term_id',
        )
    ),
    'orderby' => 'title',
    'order' => 'ASC' )
);

En github aquí:

https://gist.github.com/1275191

¡Gracias!

19 oct 2011 11:27:49
Comentarios

No aceptar mi respuesta y aceptar la tuya realmente duele, colega... me duele en el corazón. Si alguien me necesita, estaré en la sala de descanso.

Drew Gourley Drew Gourley
19 oct 2011 16:07:24

Jaja lo siento, amigo. Soy nuevo en esto, no sabía que solo se podía tener una respuesta. Lo volveré a marcar para que puedas salir de la sala de descanso.

mattberridge mattberridge
20 oct 2011 13:28:04

Jaja tranquilo colega, solo estaba bromeando - Si quieres auto-aceptar una respuesta está totalmente permitido, pero asegúrate de votar mi respuesta para que al menos obtenga algo de amor en puntos.

Drew Gourley Drew Gourley
20 oct 2011 16:34:36
0

Necesitas crear un array dentro de tax_query donde también puedas seleccionar operadores. Por ejemplo, un print_r de tax_query debería verse así:

 Array
(
    [relation] => AND
    [0] => Array
        (
            [taxonomy] => tipo-construccion
            [terms] => Array
                (
                    [0] => termino1
                    [1] => termino2blabla
                )

            [field] => slug
            [operator] => IN
        )

    [1] => Array
        (
            [taxonomy] => otra-taxonomia
            [terms] => Array
                (
                    [0] => termino1
                    [1] => termino2
                )

            [field] => slug
            [operator] => IN
        )

)

Por supuesto, puedes cambiar el field por id, pero yo siempre uso slugs para mantenerlo más simple. Como puedes ver, puedes consultar múltiples taxonomías de esta manera.

7 oct 2011 19:28:53
0
-1

no necesitas usar tax_query, elimínalo y añade lo siguiente:

term=>tipo-construccion,'tipo-construccion=>hoteles' por ejemplo.

8 oct 2011 01:40:36