Ordinare per Categoria e Post in una Query personalizzata di WordPress

5 feb 2017, 05:22:19
Visualizzazioni: 26.4K
Voti: 5

NB: Non ho abbastanza reputazione per porre la domanda direttamente sul post menzionato.

Ho utilizzato del codice da 1: Ottieni tutte le categorie e i post in quelle categorie

Elenca tutte le categorie con i post all'interno di quelle categorie, ma ho difficoltà a impostare l'ordinamento...

In particolare il Risposta rivisitata qui

<?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; // Crea un array con i nomi delle categorie e i titoli dei post
}

/* Ripristina i dati originali del post */
wp_reset_postdata();

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

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

?>  

Quello che sto cercando di fare è aggiungere l'ordinamento per Titolo della Categoria, e poi all'interno di quella categoria ordinare per Titolo del Post.

Posso aggiungerlo negli $args iniziali alla riga 1

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

Questo ordina le categorie in base al titolo dei post contenuti in quella categoria.

Sto cercando di ottenere le Categorie in ordine ASC, e poi i post all'interno di quella categoria in ordine ASC ma non riesco a capire come ordinarli entrambi.

Sarei molto grato per qualsiasi consiglio

0
Tutte le risposte alla domanda 1
0

Per fare questo devi prima ottenere tutte le categorie in ordine ascendente utilizzando get_categories, poi devi passare il cat_id in WP_Query per ottenere i post relativi a quella categoria.

$args_cat = [
    'orderby' => 'name', // Ordina per nome
    'order' => 'ASC',    // Ordine ascendente
    'hide_empty' => 0,   // Mostra anche categorie vuote
];

$categories = get_categories($args_cat);
//print_r($categories); // Debug: mostra tutte le categorie

if (!empty($categories)):
    foreach ($categories as $category):
        $args = [
            'post_type' => 'post',          // Tipo di post
            'posts_per_page' => -1,          // Mostra tutti i post
            'order' => 'ASC',                // Ordine ascendente
            'orderby' => 'title',            // Ordina per titolo
            'cat' => $category->term_id      // ID della categoria corrente
        ];

        $query = new WP_Query($args);
        while ($query->have_posts()) : $query->the_post();
            //Il tuo codice
            the_title(); // Mostra il titolo del post
        //...
        endwhile;
        wp_reset_postdata(); // Reimposta la query 
    endforeach;
endif;

Spero che questo ti sia utile!

5 feb 2017 09:00:20