J'ai des liens allant aux pages de catégories sur un blog WordPress. Ces pages de catégories affichent tous les articles de cette catégorie et de ces sous-catégories. Je veux regrouper ces listes par les auteurs.
Je suppose qu'il est nécessaire de modifier category.php pour répertorier d’abord tous les auteurs ayant des publications dans cette catégorie, puis exécuter WP_Query plusieurs fois pour chaque auteur. La deuxième partie est correcte, mais je ne vois pas comment obtenir la liste des auteurs de ces publications uniquement dans cette catégorie.
Je ne pense pas que vous ayez besoin d'obtenir la liste des auteurs dans une catégorie donnée ou d'utiliser un groupe d'individus WP_Query
, il vous suffit de pour commander les publications en auteur et vérifiez quand l'auteur change.
Deux parties à cela. Une pour modifier la boucle sur les pages de catégories sur commande par auteur. Vous pouvez vous connecter à pre_get_posts
pour le faire.
<?php
add_action('pre_get_posts', 'wpse56168_order_author');
/**
* Change the order of posts only on the category pages.
*
* @param WP_Query $q The current WP_Query object
* @author Christopher Davis <http://christopherdavis.me>
* @return void
*/
function wpse56168_order_author($q)
{
if($q->is_main_query() && $q->is_category())
{
$q->set('orderby', 'author');
$q->set('order', 'ASC'); // alphabetical, ascending
}
}
Maintenant pour obtenir une liste des auteurs .
Étant donné que WP_Query
extrait toutes les publications en même temps - il ne transfère pas les données en entrée - vous pouvez array_map
les publications pour obtenir les ID d’auteur et créer votre liste. Parce que vous avez modifié l’ordre des messages ci-dessus, les auteurs doivent paraître en ordre. Envelopper cela dans une fonction pourrait être une bonne idée:
<?php
/**
* Extract the authors from a WP_Query object.
*
* @param WP_Query $q
* @return array An array of WP_User objects.
*/
function wpse56168_extract_authors(WP_Query $q)
{
// this is PHP 5.3+, you'll have to use a named function with PHP < 5.3
$authors = array_map(function($p) {
return isset($p->post_author) ? $p->post_author : 0;
}, $q->posts);
return get_users(array(
'include' => array_unique($authors),
));
}
Ensuite, vous pouvez utiliser quelque chose comme ceci dans votre modèle category.php
pour générer la liste.
<ul>
<?php foreach(wpse56168_extract_authors($wp_query) as $author): ?>
<li><?php echo esc_html($author->display_name); ?></li>
<?php endforeach; ?>
</ul>
Le regroupement des publications par auteurs doit simplement être comparé à l'auteur des publications précédentes et à l'auteur des publications actuelles.
Exemple:
<?php
$old_author = 0;
while(have_posts()): the_post();
?>
<?php if($post->post_author != $old_author): ?>
<h2><?php the_author(); ?></h2>
<?php endif; ?>
// display post here
<?php
$old_author = $post->post_author;
endwhile;
faire votre demande à l'ordre par auteur
exemple pour WP_Query
$query = new WP_Query( array ( 'orderby' => 'author') );
ou si vous utilisez query_posts
query_posts ( array ( 'orderby' => 'author') );