WP_Query para mostrar publicaciones por categoría en WordPress (en tipos de publicaciones personalizadas)

1 minuto de lectura

avatar de usuario
Baki

Hej, seré breve. Quiero generar esto en un bucle WP:

Support
    Category1
      -Post1
      -Post2
    Category2
      -PostA
      -PostB
      -PostC

Así que quiero ordenar las publicaciones por categoría que se encuentran en un tipo de publicación personalizada: support (creado gracias al complemento Tipos, enlace: ujeb.se/A4zqZ).

Tengo esto:

<?php
$args = array('post_type' => 'support');
$query = new WP_Query($args);

while($query -> have_posts()) : $query -> the_post(); ?>

    <p><?php the_category(); ?></p>
    <h2><a href="https://stackoverflow.com/questions/31973457/<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    <p><?php the_content(); ?></p>

<?php endwhile; ?>

Mi $query almacena todas las publicaciones necesarias de mi tipo de publicación personalizada (support) pero tengo un problema al mostrarlos por categoría. Creo que necesito algún tipo de foreach pero realmente no puedo entenderlo. ¿Alguna sugerencia?

/editar/
La pantalla actual se ve así:

Support, Category1
Post1
---
Support, Category2
PostA
---
Support, Category1
Post2

etc.

  • Intenta reemplazar while($query -> have_posts()) : $query -> the_post(); ?> con <?php if (have_posts()) : ?>. También en lugar de endwhile usa endif. En tus $args necesitas algo como 'orderby' => array( 'postcol' => 'DESC', 'categorycol' => 'DESC' )

    – Mihai

    12 de agosto de 2015 a las 20:08


  • Gracias por intentarlo, pero cambiando el while bucle a un if cambia la salida a Support :

    – Baki

    12 de agosto de 2015 a las 20:48

avatar de usuario
maderahack

Así es como lo haces. Necesitabas un bucle foreach para recorrer las categorías.

<?php
$cats = get_categories();

foreach ($cats as $cat) {
$args = array(
'post_type' => 'support',
'tax_query' => array(
    array(
        'taxonomy' => 'category',
        'field'    => 'term_id',
        'terms'    => $cat->cat_ID,
        ),
    ),
);
$query = new WP_Query($args);

if ( $query->have_posts() ): ?>
    <p><?php echo $cat->cat_name ; ?></p> <?

   while($query -> have_posts()) : $query -> the_post(); ?>
      <h2><a href="https://stackoverflow.com/questions/31973457/<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
      <p><?php the_content(); ?></p> <?php
   endwhile;
endif; 

// Added this now 
wp_reset_query() ; 
}

  • Desafortunadamente, esto no funciona 🙁 Obtiene todas las categorías y descarta las support tipo de publicación, así que también obtengo publicaciones/categorías no relacionadas.

    – Baki

    13 de agosto de 2015 a las 17:24

  • Hmm, ¿cómo hago para restablecer la consulta? traté de poner wp_reset_query(); en algunos lugares, pero nada cambió realmente. He echado un vistazo más de cerca a lo que realmente sale y obtengo todas las categorías que tengo (las de support y los no relacionados) y cada uno de ellos tiene el mismo conjunto de puestos, que son los support publicaciones

    – Baki

    13 de agosto de 2015 a las 19:01

  • usort() + the_posts filtrar. Busca en mi perfil, recientemente he hecho algo similar 😉

    – Pieter Goosen

    13 de agosto de 2015 a las 19:15

  • Funcionó, gracias! Una pregunta de seguimiento rápida (aunque probablemente pueda resolver esto por mi cuenta), ¿cómo excluyo una categoría? Traté de agregar 'cat' => '-excludeme', a la matriz, pero no funcionó.

    – Baki

    13/08/2015 a las 21:10

  • Simplemente agregue la tecla de operador como esta al $args como otro parámetro array( 'taxonomy' => 'category', 'field' => 'term_id', 'terms' => array( 103, 115, 206 ), 'operator' => 'NOT IN', ),

    – LumberHack

    13 de agosto de 2015 a las 21:36

este trabajo para mi:

   $posts = new WP_Query(array(
        'category_name' => 'news,
        'post_status' => 'publish',
        'post_type' => 'post',
        'posts_per_page' => 6,
        ));

¿Ha sido útil esta solución?