Ordenar por Categoría y Post en WP Query personalizada

5 feb 2017, 05:22:19
Vistas: 26.4K
Votos: 5

NB: No tengo suficiente reputación para hacer la pregunta directamente en la publicación mencionada.

He usado algo de código de 1: Obtener todas las categorías y posts en esas categorías

Lista todas las Categorías con los Posts dentro de esas Categorías, pero tengo problemas para establecer el orderby...

Específicamente el Revisitar respuesta aquí

<?php

$args = array( 
    'posts_per_page' => -1
);

$query = new WP_Query($args);   
$q = array();

while ( $query->have_posts() ) { 

    $query->the_post(); 

    $a = '<a href="'. get_permalink() .'">' . get_the_title() .'</a>';

    $categories = get_the_category();

    foreach ( $categories as $key=>$category ) {

        $b = '<h2><a href="' . get_category_link( $category ) . '">' . $category->name . '</a></h2>';    

    }

    $q[$b][] = $a; // Crear un array con los nombres de categoría y títulos de posts
}

/* Restaurar datos originales del Post */
wp_reset_postdata();

foreach ($q as $key=>$values) {
    echo $key;

    echo '<ul>';
        foreach ($values as $value){
            echo '<li>' . $value . '</li>';
        }
    echo '</ul>';
}

?>  

Lo que estoy intentando hacer es añadir ordenación por Título de Categoría, y luego dentro de esa categoría ordenar por Título del Post.

Puedo añadirlo en los $args iniciales en la línea 1

$args = array( 
    'posts_per_page' => -1,
    'orderby'   => 'title',
    'order' => 'ASC',
);

Esto ordena las categorías según el título de los posts contenidos en esa categoría.

Estoy intentando conseguir que las Categorías estén en orden ASC, y luego los posts dentro de cada categoría en orden ASC pero no consigo averiguar cómo ordenar ambos.

Agradecería mucho cualquier consejo

0
Todas las respuestas a la pregunta 1
0

Para hacer esto primero debes obtener todas las categorías en orden ascendente usando get_categories y luego pasar el cat_id en WP_Query para obtener los posts relacionados con esa categoría.

$args_cat = [
    'orderby' => 'name', // Ordenar por nombre
    'order' => 'ASC',    // Orden ascendente
    'hide_empty' => 0,   // Mostrar categorías vacías
];

$categories = get_categories($args_cat);
//print_r($categories); // Depuración: muestra el array de categorías

if (!empty($categories)):
    foreach ($categories as $category):
        $args = [
            'post_type' => 'post',          // Tipo de contenido: posts
            'posts_per_page' => -1,         // Mostrar todos los posts
            'order' => 'ASC',               // Orden ascendente
            'orderby' => 'title',           // Ordenar por título
            'cat' => $category->term_id     // ID de la categoría actual
        ];

        $query = new WP_Query($args);
        while ($query->have_posts()) : $query->the_post();
            // Tu código aquí
            the_title(); // Muestra el título del post
        //...
        endwhile;
        wp_reset_postdata(); // Reinicia la consulta 
    endforeach;
endif;

¡Espero que esto te ayude!

5 feb 2017 09:00:20