Ce que je voudrais faire, c'est avoir une liste des utilisateurs qui ont contribué au moins un post.
Je dois montrer ce qui suit:
[Photo d'utilisateur] | [Nom d'utilisateur] | [Nombre de messages utilisateur]
par exemple.
[photo] Joe Bloggs (8)
J'ai commencé et suis allé dans cette voie:
<?php
$blogusers = get_users( 'orderby=post_count' );
foreach ( $blogusers as $user ) {
echo '<li>' . esc_html( $user->display_name ) . '</li>';
}
?>
Cependant, cela semble simplement renvoyer tous les utilisateurs inscrits sur le blog plutôt que ceux qui ont contribué, donc je ne le fais certainement pas correctement.
Je suis nouveau sur Wordpress et PHP alors toute aide serait la bienvenue.
Vous devez définir le paramètre who
dans get_users
<?php
$blogusers = get_users( 'orderby=post_count&who=authors' );
foreach ( $blogusers as $user ) {
echo '<li>' . esc_html( $user->display_name ) . '</li>';
}
?>
EDIT
Il semble que je devais répondre rapidement. Le code dans votre question et dans ma réponse est le début de ce que vous voulez réaliser.
Je n'ai pas le temps de coder pour regarder le rugby, mais voici le code complet utilisé dans les vingt-quatorze pour afficher les auteurs et leur nombre de posts. J'espère que cela t'aides
function twentyfourteen_list_authors() {
$contributor_ids = get_users( array(
'fields' => 'ID',
'orderby' => 'post_count',
'order' => 'DESC',
'who' => 'authors',
) );
foreach ( $contributor_ids as $contributor_id ) :
$post_count = count_user_posts( $contributor_id );
// Move on if user has not published a post (yet).
if ( ! $post_count ) {
continue;
}
?>
<div class="contributor">
<div class="contributor-info">
<div class="contributor-avatar"><?php echo get_avatar( $contributor_id, 132 ); ?></div>
<div class="contributor-summary">
<h2 class="contributor-name"><?php echo get_the_author_meta( 'display_name', $contributor_id ); ?></h2>
<p class="contributor-bio">
<?php echo get_the_author_meta( 'description', $contributor_id ); ?>
</p>
<a class="button contributor-posts-link" href="<?php echo esc_url( get_author_posts_url( $contributor_id ) ); ?>">
<?php printf( _n( '%d Article', '%d Articles', $post_count, 'twentyfourteen' ), $post_count ); ?>
</a>
</div><!-- .contributor-summary -->
</div><!-- .contributor-info -->
</div><!-- .contributor -->
<?php
endforeach;
}
Appelez-le simplement dans vos fichiers de modèle comme
twentyfourteen_list_authors();
Il n’existe aucun moyen par défaut dans WordPress d’effectuer cette tâche, car Pieter Goosen a souligné, existe l’argument who
pour get_users()
qui renvoie les utilisateurs que can post, et non les utilisateurs que ont posté.
Toutefois, vous pouvez utiliser 'pre_user_query'
pour ajouter une clause SQL JOIN
afin de ne récupérer que les utilisateurs ayant au moins une publication.
Pour être honnête, lorsque vous interrogez les utilisateurs qui les commandent en fonction du nombre de messages, la jointure est déjà créée par WordPress, mais en utilisant un OUTER LEFT JOIN
, ainsi, même les utilisateurs sans message sont renvoyés. La seule chose dont vous avez besoin est de remplacer le OUTER LEFT JOIN
par un INNER JOIN
.
function filter_users_have_posted( $user_query ) {
$user_query->query_from = str_replace( 'LEFT OUTER', 'INNER', $user_query->query_from );
remove_action( current_filter(), __FUNCTION__ );
}
add_action( 'pre_user_query', 'filter_users_have_posted' );
$blogusers = get_users( 'orderby=post_count&order=desc' );
Depuis la version 4.3.0
, vous pouvez maintenant spécifier le paramètre has_published_posts
à l'appel de fonction get_users();
.
Passez une
array
types de publication pour filtrer les résultats aux utilisateurs ayant publié des publications dans ces types de publication.true
est un alias pour tous les types de publications publiques.
Exemple
if ( $users = get_users( array(
'orderby' => 'nicename',
'order' => 'ASC',
'has_published_posts' => array( 'post' ),
'blog_id' => absint( get_current_blog_id() )
) ) ) {
print_r( $users );
}
Ressources