Cómo excluir una taxonomía personalizada del bucle de entradas

16 mar 2011, 16:50:04
Vistas: 57.5K
Votos: 28

¿Existe una manera simple o fácil de excluir todas las entradas de una taxonomía personalizada en el bucle? He estado buscando por todas partes, y ni SE, SO o Google parecen tener una respuesta directa.

Sé que se puede hacer a través de una consulta WPDB, pero eso parece demasiado complicado para algo que debería ser bastante simple.

3
Comentarios

¿Todas las publicaciones que tienen términos en esa taxonomía, o te refieres a un término particular de tu taxonomía personalizada? Ejemplo: Si mi taxonomía es fruta y tengo dos términos, manzana y naranja, ¿querría excluir todas las publicaciones que tengan fruta, o solo aquellas que tengan manzanas?

t31os t31os
16 mar 2011 17:00:59

para ampliar la Q de @t31os: post_tag, category, link_category, etc. son todas taxonomías _builtin. Así que, incluso si llamas a las etiquetas de publicación "términos", sigue siendo solo una taxonomía (no jerárquica) y en el mismo "nivel" que la taxonomía "category" (jerárquica).

kaiser kaiser
16 mar 2011 19:36:18

Para continuar con el ejemplo de @t31os: Estoy intentando excluir todas las publicaciones que están en la taxonomía fruta (sin importar si están en 'manzanas', 'peras' o 'naranjas').

Thomas Thomas
17 mar 2011 09:52:48
Todas las respuestas a la pregunta 6
4
31

La solución a esto no es muy conocida, pero debería serlo.

Puedes hacer lo siguiente:

$args['tax_query'] = array(
    array(
        'taxonomy' => 'category',
        'terms' => array('cat', 'dog'),
        'field' => 'slug',
        'operator' => 'NOT IN',
    ),
);
query_posts($args);

El argumento operator puede tomar otros valores, pero el código anterior básicamente dice: obtener todas las publicaciones de la taxonomía 'category' que no tengan los términos 'cat' o 'dog'.

21 mar 2011 13:07:04
Comentarios

Inteligente. Pero aún tendría que ingresar manualmente cada término en esa taxonomía, ¿correcto?

Thomas Thomas
21 mar 2011 13:45:20

No te sigo, lo siento. En el array de términos, defines los valores de los términos que quieres excluir de tu consulta de loop. Si quisieras que fueran dinámicos, quizás podrías agregar un meta valor personalizado a cada post y luego verificar el valor de esa meta clave en tu consulta y configurarlo de esa manera si es a lo que te refieres.

Dwayne Charrington Dwayne Charrington
21 mar 2011 14:18:13

Ah. Entiendo lo que quieres decir, pero eso es realmente engorroso.

Thomas Thomas
27 mar 2011 15:59:16

No lo he revisado mucho, pero seguramente debe existir un plugin que haga lo que estás preguntando, ¿no?

Dwayne Charrington Dwayne Charrington
27 mar 2011 23:30:17
2
20

Querrás usar el operador NOT EXISTS junto con pasar el slug de la taxonomía, lo que le indica a la consulta que no incluya ninguna de las categorías seleccionadas de tu taxonomía personalizada dentro del bucle.

Para excluir todas las entradas que estén en la taxonomía "fruit" (sin importar el tipo de fruta), aquí está el fragmento:

$args = array(
    'post_type'      => 'post',
    'tax_query'      => array(
        array(
            'taxonomy' => 'fruit',
            'operator' => 'NOT EXISTS'
        )
    )
);

$query = new WP_Query( $args );
17 abr 2017 19:23:22
Comentarios

Parece que esto debería ser más eficiente que decir NOT IN para XX número de terms. Esa lista de términos podría crecer mucho, pero esto debería cubrir todos los términos con el nombre de esa taxonomía.

italiansoda italiansoda
12 may 2017 22:48:22

Aunque esta es la respuesta a la pregunta del OP (votada arriba), la mayoría probablemente queremos excluir un término o conjunto de términos específicos. Para eso, querrás esta respuesta.

rinogo rinogo
2 ago 2019 21:34:38
0

Aquí te mostramos cómo hacerlo para tipos de entradas personalizadas y taxonomías personalizadas:

$happening = new WP_Query(
array( 
  'post_type'  => 'news',        // solo consultar el tipo de entrada News
  'tax_query' => array(
    array(
        'taxonomy'  => 'news-cat',
        'field'     => 'slug',
        'terms'     => 'media', // excluir elementos de media en la taxonomía personalizada news-cat
        'operator'  => 'NOT IN')

        ),
   )
);

Esto funcionó perfectamente para excluir una taxonomía personalizada de un tipo de entrada personalizada.. Solo quería agregar el código del bucle de consulta para completar el fragmento: while ( $the_query->have_posts() ) : $the_query->the_post();

29 sept 2011 22:47:49
0
query_posts( array(
    'post_type' => 'listados', // Tipo de publicación: listados
    'tax_query' => array(
        array(
            'taxonomy' => 'estado', // Taxonomía: estado
            'field'    => 'slug', // Campo a comparar: slug
            'terms'    => 'vendido', // Términos a excluir: vendido
            'operator' => 'NOT IN' // Operador: NO INCLUIR
            ),
        )
    )
);

Este código excluye los listados con estado => vendido del tipo de publicación => listados

21 ene 2017 10:49:49
0

Hice lo siguiente para excluir posts de un término de taxonomía específico:

$argos = array( 
    'tax_query' =>  array (
        array(
            'taxonomy' => 'topics', // Mi taxonomía personalizada
            'terms' => 'college', // El término de taxonomía que quería excluir
            'field' => 'slug', // Si estoy pasando el Slug del término o el ID del término
            'operator' => 'NOT IN', // Operador de selección - usar IN para incluir, NOT IN para excluir
        ),
    ),
    'post_type'=>'page', // Tipo de post que quiero mostrar, puede ser un custom post type también
    'posts_per_page' => -1,
    'orderby' => 'title',
    'order'=>'ASC',
    'post_parent' =>$post->ID // mostrar posts o páginas hijas de la página/post actual
); 

$query = new WP_Query( $args );
27 abr 2012 11:00:15
1
-1

Utilizo el "Plugin de WordPress 'Category Visibility' de RYO" que parece funcionar bastante bien.

Puedes decidir en una página de administración qué categorías son visibles o están excluidas de varias áreas.

http://ryowebsite.com/wp-plugins/category-visibility/

-Adam

16 mar 2011 18:34:36
Comentarios

Me parece que tener que instalar un plugin adicional para hacer esto es demasiado. Prefiero mantener mis dependencias al mínimo y seguramente debe haber una forma de hacer esto dentro del loop.

Thomas Thomas
17 mar 2011 09:53:35