Cómo filtrar tipos de contenido personalizados por taxonomía de categoría personalizada

14 oct 2016, 19:47:04
Vistas: 41.2K
Votos: 4

Estoy usando WordPress 4.6.1 y estoy tratando de aprender cómo filtrar tipos de contenido personalizados mediante un proceso de taxonomía de categorías. Esto es muy útil ya que personas sin conocimientos técnicos pueden filtrar fácilmente posts de tipos de contenido personalizados por categoría en el panel de administración.

Esta es mi configuración...

  1. Estoy construyendo un tema hijo basado en tweentysixteen

  2. Creé y registré un tipo de contenido personalizado en mi archivo functions.php del tema hijo de esta manera...

    add_action('init','prowp_register_my_post_types');
    function prowp_register_my_post_types() {
        register_post_type('products',
        array(
            'labels' => array (
                'name' => 'Productos',
                'singular_name' => 'Producto',
                'add_new' => 'Añadir Nuevo Producto',
                'add_new_item' => 'Añadir Nuevo Producto',
                'edit_item' => 'Editar este Producto',
                'new_item' => 'Nuevo Producto',
                'all_items' => 'Todos Mis Productos'
            ),
            'public' => true,
            'show_ui' => true,
            'taxonomies'  => array ( 
                'category' 
            ),
            'supports' =>  array (
                'title', 
                'revisions', 
                'editor', 
                'thumbnail', 
                'page-attributes', 
                'custom-fields')
        ));
    }
    
  3. Ahora estoy usando mi tipo de contenido personalizado registrado en mi archivo index.php del tema hijo de esta manera:

    $pargs = array(
            'post_per_page' => '-1',
            'post_type' => 'products',
            'tax_query' => array(
                'taxonomy' => 'category',
                'field'    => 'slug',
                'terms' => 'Specials'
            )
        );
        $myProducts = new WP_Query($pargs);
        while ( $myProducts->have_posts() ) : $myProducts->the_post();
            get_template_part('template-parts/products',get_post_format());
        endwhile;
        rewind_posts();
        wp_reset_postdata();
    
  4. Finalmente, desde wp-admin, creé mis posts de tipo de contenido personalizado y asigné la categoría "Specials" a "uno" de mis posts. Los otros están sin categorizar. Y todas las páginas están publicadas.

...Pero por alguna razón, mi página en el navegador está listando todos mis posts de este tipo de contenido personalizado, y no solo los Specials. ¿Estoy haciendo algo mal?

0
Todas las respuestas a la pregunta 2
2

Estás cometiendo un pequeño error en tu $pargs

Según la documentación

Nota importante: tax_query requiere un array de arrays con argumentos de consulta de taxonomía (toma un array de arrays). Además, tienes "post_per_page" en lugar de "posts_per_page"

$pargs = array(
    'posts_per_page' => '-1',  // Número de posts a mostrar (-1 para todos)
    'post_type' => 'products',  // Tipo de post personalizado
    'tax_query' => array(       // Consulta de taxonomía
        array(
            'taxonomy' => 'category',  // Taxonomía a consultar
            'field'    => 'slug',     // Campo a comparar (slug o id)
            'terms' => 'specials'     // Términos a buscar
        )
    )
)
14 oct 2016 20:49:51
Comentarios

jaja - ¡siempre es algo tan ridículamente simple lo que se pasa por alto! ¡Muchas gracias!!

klewis klewis
14 oct 2016 20:54:55

@blackhawk ... sí, ¡le pasa a todo el mundo!! :)

Anish Anish
14 oct 2016 20:58:56
0

Puedes probar con los siguientes códigos:

// Obtener los términos de taxonomía 'category' para el post actual
$terms = wp_get_post_terms( $post->ID, array('category') );
// Extraer los slugs de los términos
$term_slugs = wp_list_pluck( $terms, 'slug' );    
// Configurar los argumentos para la consulta
$args = array(
        'post_per_page' => '-1', // Mostrar todos los posts
        'post_type' => array( 'products' ), // Tipo de post 'products'
            'tax_query' => array( // Consulta por taxonomía
                array(
                'taxonomy' => 'category', // Taxonomía a consultar
                'field' => 'slug', // Campo a comparar
                'terms' => $term_slugs // Términos a buscar
                )  
    );


    $my_query = null;
    // Crear nueva instancia de WP_Query con los argumentos
    $my_query = new WP_Query($args);
14 oct 2016 20:44:42