Filtrado de taxonomías personalizadas

15 feb 2013, 23:39:09
Vistas: 39.8K
Votos: 6

Esta es una publicación cruzada de los foros de WordPress, por lo que me disculpo, pero ha pasado casi una semana sin obtener respuesta allí, así que espero que alguien aquí pueda ayudar. Si recibo una respuesta en cualquiera de los dos lugares, actualizaré la publicación con un enlace.

Estoy intentando extender la funcionalidad del tema personalizado de mi cliente, y estoy teniendo problemas tratando de hacer que query_posts() extraiga una lista de taxonomías personalizadas filtradas por categoría. La creación del tipo de post personalizado en functions.php es esta:

//Tipos de Post Personalizados
add_action('init', 'create_myportfoliotype');
function create_myportfoliotype() {
    $myportfoliotype_args = array(
        'label' => __('Portfolio'),
        'singular_label' => __('Portfolio'),
        'public' => true,
        'show_ui' => true,
        'menu_position' => 5,
        'capability_type' => 'post',
        'hierarchical' => false,
        'publicly_queryable' => true,
        'query_var' => true,
        'rewrite' => array( 'slug' => 'portfolio', 'with_front' => false ),
        'can_export' => true,
        'supports' => array(
            'title', 
            'editor', 
            'post-thumbnails',
            'custom-fields',
            'page-attributes',
            'author',
            'thumbnail'
          )
       );
  register_post_type('myportfoliotype',$myportfoliotype_args);
}


//Taxonomías
register_taxonomy("categories", array("myportfoliotype"), array("hierarchical" => true, "label" => "Category", "singular_label" => "Category", "rewrite" => true));
register_taxonomy( 'tags', array("homepage"), array( 'hierarchical' => false, 'label' => 'Tags', 'query_var' => true, 'rewrite' => true ) );
register_taxonomy( 'specifics', array("myportfoliotype"), array( 'hierarchical' => false, 'label' => 'Specifics', 'query_var' => true, 'rewrite' => true ) );

Actualmente el sitio tiene una página que obtiene todas las entradas y luego filtra lo que es visible mediante jQuery. La consulta que obtiene las entradas es esta:

query_posts( array( 'post_type' => 'myportfoliotype', 'paged' => $paged, 'posts_per_page' => 80))

Esto funciona, pero como dije, obtiene todo. Lo que quieren ahora son 2 plantillas personalizadas que extraigan solo 2 categorías específicas cada una. No puedo hacer el filtrado a través de jQuery ya que visualmente no funciona en este caso. Estoy intentando obtener solo las 2 categorías, pero por alguna razón ninguna variación del siguiente código parece funcionar:

query_posts( array( 'post_type' => 'myportfoliotype', 'paged' => $paged, 'posts_per_page' => 80, 'tag_id' => '9' ))

Todo lo que he intentado sigue extrayendo todas las entradas o no extrae ninguna.

PD: ¿Alguien conoce una función para volcar la consulta raw que genera query_posts? Si pudiera ver qué está haciendo realmente la consulta con cada variación que probé y comparar eso con la información en wp_postmeta, podría ayudar a descubrir dónde está el problema.

0
Todas las respuestas a la pregunta 1
2
13

Esta no es una tarea difícil, pero tendrías que leer cuidadosamente el Codex. Especialmente la parte de tax_query de WP_Query.

Tu llamada propuesta a query_posts es incorrecta. Debería verse así:

query_posts( array(  
    'post_type' => 'myportfoliotype', 
    'paged' => $paged, 
    'posts_per_page' => 80, 
    'tax_query' => array( 
        array( 
            'taxonomy' => 'category', //o etiqueta o taxonomía personalizada
            'field' => 'id', 
            'terms' => array('9') 
        ) 
    ) 
) );

Además, para obtener mayor eficiencia en el uso de consultas a la base de datos, deberías considerar usar el hook pre_get_posts en lugar de query_posts

16 feb 2013 01:07:48
Comentarios

Gracias, eso funcionó una vez que corregí los errores tipográficos. No me había dado cuenta de que query_posts tomaba los mismos parámetros que WP_Query, y el parámetro tax_query no aparece listado en la documentación de query_posts(). Además, lo siento, necesito 9 puntos más de reputación antes de poder votar positivamente, pero lo haría si pudiera. :)

Michael VanDeMar Michael VanDeMar
16 feb 2013 06:56:45

Está bien, no tienes que votar positivamente, es suficiente si marcas la respuesta como correcta ;)

david.binda david.binda
16 feb 2013 12:33:27