Ordinare per Categoria e Post in una Query personalizzata di WordPress
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

Per fare questo devi prima ottenere tutte le categorie in ordine ascendente utilizzando
get_categories
, poi devi passare il cat_id inWP_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!
