WordPress: ¿Cómo puedo excluir publicaciones en taxonomías secundarias de una consulta de taxonomía personalizada?

2 minutos de lectura

Wordpress ¿Como puedo excluir publicaciones en taxonomias secundarias de una
ordenado

Mi tema de WordPress tiene una taxonomía personalizada llamada “Colecciones”. La taxonomía personalizada es jerárquica, por lo que existen subcolecciones.

Tengo una colección llamada “Libros” y una subcolección llamada “Novelas”. Hay algunas publicaciones que solo están en “Libros” y algunas publicaciones que están en “Novelas”. Quiero que la página de la colección “Libros” solo muestre las publicaciones de la colección principal de “Libros”, no las de la subcolección “Novelas”. Pero de forma predeterminada, WordPress incluye publicaciones en “subcolecciones” en la consulta de una taxonomía.

¿Cómo excluyo publicaciones en términos secundarios de mi consulta de taxonomía? Esto es fácil con categorías, pero parece que no hay una forma integrada de hacerlo con taxonomías personalizadas.


Actualizar:
La solución de Jan funcionó perfectamente. Aquí está el código que usé, colocado encima del bucle en index.php:

// if is taxonomy query for 'collections' taxonomy, modify query so only posts in that collection (not posts in subcollections) are shown.
if (is_tax()) {
 if (get_query_var('collection')) {
  $taxonomy_term_id = $wp_query->queried_object_id;
  $taxonomy = 'collection';
  $unwanted_children = get_term_children($taxonomy_term_id, $taxonomy);
  $unwanted_post_ids = get_objects_in_term($unwanted_children, $taxonomy);

  // merge with original query to preserve pagination, etc.
  query_posts( array_merge( array('post__not_in' => $unwanted_post_ids), $wp_query->query) );
 }
}

Parece la clase WP_Query siempre incluye todos los elementos de las taxonomías jerárquicas. Si desea contrarrestar esto, puede usar el mismo truco que ellos usan: obtenga todos los subelementos de su elemento de taxonomía, luego obtenga todas las identificaciones de publicación en esos subelementos y luego póngalos en el post__not_in parámetro:

$unwanted_children = get_term_children($taxonomy_term_id, $taxonomy);
$unwanted_post_ids = get_objects_in_term($unwanted_children, $taxonomy);

Esto resultará en una consulta que tiene AND posts.ID IN (1, 2, 3) AND posts.ID NOT IN (2, 3), que devolverá solo esta publicación con ID 1. Muy poco elegante, pero funciona.

Por supuesto, si sigue esta ruta, también podría simplemente pasar las identificaciones de publicación que desea y no decirle a la consulta nada sobre la taxonomía.

¿Cómo haces esto para las categorías? El código de consulta parece incluir niños allí también.

  • ¡Gracias, esto funcionó perfectamente! Con las categorías, puede usar el parámetro “category__in”, que no incluye publicaciones en categorías secundarias. Lamentablemente, WordPress aún no tiene un parámetro equivalente para las taxonomías personalizadas jerárquicas.

    – en forma

    11 ago.

.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad