custom-post-types – Filtrar un tipo de publicación personalizada por taxonomía personalizada en la plantilla de archivo

Pregunta:

He visto esta pregunta publicada en diferentes formas antes, pero la mayoría de esas soluciones se centran en la interfaz de administración y no he encontrado ninguna respuesta que se aplique a la interfaz.

Tengo un tipo de publicación personalizada y una taxonomía personalizada asociada. Estoy usando la página de archivo ( archive-{custom_type}.php ) para mostrar los elementos y usando wp_list_categories para mostrar una lista de los términos de taxonomía personalizados. Puedo modificar manualmente las publicaciones que se muestran agregando un parámetro tax_query a la llamada WP_Query , pero el problema con el que me encuentro es que no puedo averiguar cómo alterar los enlaces de taxonomía para que apunten a esta página de archivo para poder filtrar dinámicamente. Prefiero no duplicar el marcado y el código de esta plantilla en un archivo de taxonomy-{custom_type}.php .

¿Necesito simplemente generar los enlaces de taxonomía manualmente? ¿Cómo debería estructurarse la URL para poder obtener el parámetro de consulta? Tengo query_var => true set y una regla de reescritura en la definición de taxonomía personalizada, pero no he podido obtener get_query_var() para devolver nada.

El resultado final debe ser una plantilla que pueda enumerar todos los elementos en el tipo de publicación personalizada, o filtrar esos elementos por su taxonomía personalizada asociada.

Respuesta:

Supongamos que tiene un tipo de publicación de "libro" y una taxonomía de "género" . Y desea obtener libros con el género de "ciencia ficción" .

Puede pasar el parámetro en la URL usando:

?taxonomy=genre&term=scifi

Luego, puede obtener esos parámetros usando get_query_var('taxonomy') y get_query_var('term') y agregarlos a los argumentos de WP_Query.

$taxonomy = get_query_var('taxonomy');
$term = get_query_var('term');

$args = array(
    'post_type' => 'book',
    'tax_query' => array(
        array(
            'field'    => 'slug',
            'taxonomy' => $taxonomy,
            'terms'    => $term,
        )
    ),
);
$query = new WP_Query($args);

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım