Excluir todas las sub Categorías de WP_QUERY -- php campo con wordpress campo con loops camp Relacionados El problema

Exclude all sub categories from wp_query


1
vote

problema

Español

He estado buscando alto y bajo para y responder a esto, ¡pero en realidad no estoy seguro de que es posible!

Tengo un wp_query que tira de las publicaciones de casi todo, sin embargo, deseo excluir una categoría específica y / o todas las categorías secundarias.

Búsqueda en torno a las personas aún está para encontrar una solución para esto.

Aquí está mi consulta hasta ahora:

  $args = array(     'post_type' => 'sell_media_item',     'cat' => -98,     'orderby' => 'desc',     'paged' => $paged,     'posts_per_page' => 20 ); ?>  <?php $loop = new WP_Query( $args ); ?>   

Pensé que simplemente excluyendo cat 98 también agarraría todas las categorías secundarias, pero aparentemente no.

He intentado usar:

category__not_in , depth=0 , parent=0 e incluso una adaptación de este , sin suerte.

¿Alguna idea?

[editar] Estoy usando una taxonomía personalizada llamada colecciones, por lo que poner 'collection' => 'vip' en la consulta significa que solo mostrará esta colección. Estoy pensando si hay una manera de revertir esto, por lo que excluye la colección en su lugar?

Como no es posible enumerar todas las categorías que aparecerán aquí, ya que cambiarán todo el tiempo.

[editar 2] Después de la discusión en los comentarios a continuación, aquí está el código actualizado.

  $ex = array(     'taxonomy' => 'collection',     'child_of' => 98,     'hide_empty' => 0 ); $categories = get_categories($ex);  $categoriesToExclude = array(); foreach ($categories as $category) {     $categoriesToExclude[] = $category->cat_ID; }  echo('<pre>'); var_dump($categories);   $args = array(     'post_type' => 'sell_media_item',     'category__not_in' => $categoriesToExclude,     'orderby' => 'desc',     'paged' => $paged,     'posts_per_page' => 20 ); ?>  <?php echo('<br /><pre>'); var_dump($args); ?>  <?php $loop = new WP_Query( $args ); ?>   
Original en ingles

I've been searching high and low for and answer to this, but I'm not actually sure it's possible!

I have a WP_Query that pulls posts from almost everything, however, I wish to exclude a specific category and/or all it's sub categories.

Searching around people are yet to find a solution for this.

Here's my query so far:

$args = array(     'post_type' => 'sell_media_item',     'cat' => -98,     'orderby' => 'desc',     'paged' => $paged,     'posts_per_page' => 20 ); ?>  <?php $loop = new WP_Query( $args ); ?> 

I thought just excluding cat 98 would grab all the sub categories too, but apparently not.

I've tried using:

category__not_in, depth=0, parent=0 and even an adaptation of this, with no luck.

Any ideas?

[EDIT] I'm using a custom taxonomy called Collections, so putting 'collection' => 'vip' into the query means it will only show this collection. I'm thinking if there's a way of reversing this so it excludes the collection instead?

As it's not possible to list all of the categories that will appear here as they will be changing all of the time.

[EDIT 2] After the discussion in the comments below, here's the updated code.

$ex = array(     'taxonomy' => 'collection',     'child_of' => 98,     'hide_empty' => 0 ); $categories = get_categories($ex);  $categoriesToExclude = array(); foreach ($categories as $category) {     $categoriesToExclude[] = $category->cat_ID; }  echo('<pre>'); var_dump($categories);   $args = array(     'post_type' => 'sell_media_item',     'category__not_in' => $categoriesToExclude,     'orderby' => 'desc',     'paged' => $paged,     'posts_per_page' => 20 ); ?>  <?php echo('<br /><pre>'); var_dump($args); ?>  <?php $loop = new WP_Query( $args ); ?> 
        

Lista de respuestas

4
 
vote

obtendría la lista de todas las subcategorías con get_categories () y luego construye una < Código> @Injectable() export class NavigatorService{ private previousRoute:string = null; private currentRoute:string = null; /** Listen to and log new route paths */ constructor(private router:Router){ router.events.filter(e => e instanceof NavigationEnd).subscribe( e => { this.previousRoute = this.currentRoute; this.currentRoute = e['url']; } ) } /** Checks whether the next route corresponds to the previous route */ isGoingBack(nextState:RouterStateSnapshot){ return nextState.url === this.previousRoute; } } 5 EXCLUSION ARRAY basado en los resultados.

  @Injectable() export class NavigatorService{   private previousRoute:string = null;   private currentRoute:string = null;   /** Listen to and log new route paths */   constructor(private router:Router){     router.events.filter(e => e instanceof NavigationEnd).subscribe(       e => {         this.previousRoute = this.currentRoute;         this.currentRoute = e['url'];       }     )   }   /** Checks whether the next route corresponds to the previous route  */   isGoingBack(nextState:RouterStateSnapshot){                          return nextState.url === this.previousRoute;   } } 6  

Este es solo un ejemplo, es posible que tenga que modificarlo ligeramente para que se ajuste a sus necesidades.

 

I would get the list of all sub categories with get_categories() and then build a 'cat' exclusion array based on the results.

$args = array('parent' => 98); $categories = get_categories($args);  $categoriesToExclude = array(); foreach ($categories as $category) {     $categoriesToExclude[] = $category->cat_ID; }   $args = array(     'post_type' => 'sell_media_item',     'category__not_in' => $categoriesToExclude,     'orderby' => 'desc',     'paged' => $paged,     'posts_per_page' => 20 ); ?>  <?php $loop = new WP_Query( $args ); ?> 

This is just an example, you may have to modify it slightly to fit your needs.

 
 
         
         
0
 
vote
vote
La mejor respuesta
 

¡SO!

Parece que estaba tratando de hacer lo imposible. No pude conseguir este guión trabajando para la vida de mí. Así que probé un ángulo diferente. En lugar de excluir una taxonomía personalizada y sus términos, decidí mover todos mis otros términos a un término de los padres y simplemente llamé a eso.

Aquí está el código si alguien está interesado ...

  @Injectable() export class NavigatorService{   private previousRoute:string = null;   private currentRoute:string = null;   /** Listen to and log new route paths */   constructor(private router:Router){     router.events.filter(e => e instanceof NavigationEnd).subscribe(       e => {         this.previousRoute = this.currentRoute;         this.currentRoute = e['url'];       }     )   }   /** Checks whether the next route corresponds to the previous route  */   isGoingBack(nextState:RouterStateSnapshot){                          return nextState.url === this.previousRoute;   } } 7  
 

So!

It appears I was trying to do the impossible. I couldn't get this script working for the life of me. So I tried a different angle. Instead of excluding a custom taxonomy and its terms, I decided to move all of my other terms into a parent term and just called that instead.

Here's the code if anyone's interested...

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;                 $args = array(     'post_type' => 'sell_media_item',     'taxonomy' => 'collection',     'term' => 'clubs',     'orderby' => 'desc',     'paged' => $paged,     'posts_per_page' => 20 );   $loop = new WP_Query( $args );  if ( $loop->have_posts() ) : while ($loop->have_posts()) : $loop->the_post(); ?> 
 
 
0
 
vote

Escribí mi propia función para excluir las publicaciones de subcategoría en el bucle, utilizando consejos de la publicación anterior y en otros lugares.

En mi archivo de archivo Archive.php, sobre el bucle, enumero las subcategorías (opcional):

      <?php        $current_cat = get_queried_object();         $args = array( 'parent'=>$current_cat->term_id, 'child_of' => $current_cat->term_id, );         $categories = get_categories( $args );         foreach($categories as $category) { ?>             <h2><?php echo $category->name ;?></h2>            <p> etc....</p>       <?php } ?>   

En mi archivo functions.php, he agregado la siguiente función personalizada usando pre_get_posts:

  add_action( 'pre_get_posts', 'main_query_without_subcategory_posts' );  function main_query_without_subcategory_posts( $query ) {  if ( ! is_admin() && $query->is_main_query() ) {     // Not a query for an admin page.     // It's the main query for a front end page of your site.      if ( is_category() ) {     //Get the current category         $current_category = get_queried_object();         //get the id of the current category         $current_cat_id = $current_category->term_id;          //find the children of current category         $cat_args = array( 'parent'=>$current_category->term_id, 'child_of' => $current_category->term_id, );         $subcategories = get_categories( $cat_args );          //Get a list of subcategory ids, stick a minus sign in front         $subcat_id = array();                  foreach($subcategories as $subcategory) {              $subcat_id[] = " -". $subcategory->term_id;          }          //join them together as a string with a comma seperator                   $excludesubcatlist = join(',', $subcat_id);         //If you have multiple parameters, use $query->set multiple times         $query->set( 'posts_per_page', '10' );         $query->set( 'cat', ''.$current_cat_id.','.$excludesubcatlist.'' );       }     }   }   

Luego, en el archivedor.php, debajo de las subcategorías, he agregado el bucle regular de WordPress que ahora está siendo modificado por la función anterior:

  <?php  while (have_posts() ) : the_post(); ?>      <h2><?php the_title();?></h2>      <p> etc....</p>  <?php endwhile;?>   

Aunque el Codex de WordPress dice que usar "Category__in" excluirá las publicaciones de las subcategorías, que no funcionó para mí y las publicaciones de subcategoría aún se mostraban.

https://codex.wordpress.org/class_reference/wp_query#category_parameters

https://developer.wordpress.org/reference/hooks/pre_get_posts/

 

I wrote my own function in order to exclude subcategory posts from the loop, using tips from the above post and elsewhere.

In my theme archive.php file, above the loop, I list the subcategories (optional):

    <?php        $current_cat = get_queried_object();         $args = array( 'parent'=>$current_cat->term_id, 'child_of' => $current_cat->term_id, );         $categories = get_categories( $args );         foreach($categories as $category) { ?>             <h2><?php echo $category->name ;?></h2>            <p> etc....</p>       <?php } ?> 

In my functions.php file, I've added the following custom function using pre_get_posts:

add_action( 'pre_get_posts', 'main_query_without_subcategory_posts' );  function main_query_without_subcategory_posts( $query ) {  if ( ! is_admin() && $query->is_main_query() ) {     // Not a query for an admin page.     // It's the main query for a front end page of your site.      if ( is_category() ) {     //Get the current category         $current_category = get_queried_object();         //get the id of the current category         $current_cat_id = $current_category->term_id;          //find the children of current category         $cat_args = array( 'parent'=>$current_category->term_id, 'child_of' => $current_category->term_id, );         $subcategories = get_categories( $cat_args );          //Get a list of subcategory ids, stick a minus sign in front         $subcat_id = array();                  foreach($subcategories as $subcategory) {              $subcat_id[] = " -". $subcategory->term_id;          }          //join them together as a string with a comma seperator                   $excludesubcatlist = join(',', $subcat_id);         //If you have multiple parameters, use $query->set multiple times         $query->set( 'posts_per_page', '10' );         $query->set( 'cat', ''.$current_cat_id.','.$excludesubcatlist.'' );       }     }   } 

Then in the archive.php, below the subcategories, I've added the regular WordPress loop which is now being modified by the above function:

<?php  while (have_posts() ) : the_post(); ?>      <h2><?php the_title();?></h2>      <p> etc....</p>  <?php endwhile;?> 

Though the WordPress codex says that using "category__in" will exclude posts from subcategories, that didn't work for me and subcategory posts were still showing.

https://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters

https://developer.wordpress.org/reference/hooks/pre_get_posts/

 
 

Relacionados problema

-6  Rendimiento de bucles anidados [cerrado]  ( Nested loops performance ) 
Es difícil decir qué se está preguntando aquí. Esta pregunta es ambigua, vaga, incompleta, demasiado amplia, o retórica y n...

2  Python / Selenium Stale Element Referencia en el bucle  ( Python selenium stale element reference in for loop ) 
Estoy teniendo problemas en bucle a través de una lista de identificación de la empresa y usándolos en una barra de búsqueda. Mi código funciona bien cuando e...

3  Jekyll / líquido para el bucle siendo misterioso  ( Jekyll liquid for loop being mysterious ) 
Estoy tratando de usar el bucle POR en Jekyll para hacer datos de muestra. Puedo hacer referencia a los objetos de descuento o lo que sea que se llame directa...

44  ¿Cómo me conecto a una base de datos y un bucle sobre un conjunto de registros en C #?  ( How do i connect to a database and loop over a recordset in c ) 
¿Cuál es la forma más sencilla de conectar y consultar una base de datos para un conjunto de registros en C #? ...

0  Lista a través del archivo usando un bucle while  ( List through file using a while loop ) 
No puedo hacer que esto funcione correctamente, necesito que el programa enumere a través de los registros dentro del archivo, si $ registros [$ fila] [2] es ...

0  Documento no está listo para insertar después del método usando un bucle con jQuery  ( Document not ready for insert after method using a loop with jquery ) 
¿Hay alguna forma de usar un bucle para insertar elementos divecuarios separados detrás de uno a otro? ahora mismo uso un bucle para hacer precisamente eso,...

1  Bucle, contando y el método setinterval  ( Looping counting and the setinterval method ) 
1) ¿Esta técnica de construcción funcionaría? ¿O necesitaría tener esto.start ()? 2) ¿El reinicio del índice en cualquier punto? var imageRotate = new tR...

0  PHP Posible fugas de memoria  ( Php possible memory leak ) 
Tengo un script que se bucea a través de una base de datos para que las imágenes se conviertan con GD & AMP; Imagick. i Desactive o reemplace todas las vari...

3  C ++ Array ... necesita ayuda para comprender el código  ( C c array need help understanding code ) 
¿Puedes por favor explicar este código? Me parece un poco confuso para mí. ¿Es "A" una doble matriz? Pensaría que es solo un número entero, pero luego en la d...

352  ¿Cuál es la forma de "correcta" de iterar a través de una matriz en Ruby?  ( What is the right way to iterate through an array in ruby ) 
PHP, para todos sus defectos, es bastante bueno en este aspecto. No hay diferencia entre una matriz y un hash (tal vez soy ingenuo, pero esto parece obvio der...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos