Was ich tun möchte, ist eine Liste von Benutzern, die mindestens einen Beitrag beigetragen haben.
Ich muss folgendes zeigen:
[Benutzerfoto] | [Benutzername] | [Anzahl der Benutzerbeiträge]
z.B.
[Foto] Joe Bloggs (8)
Ich habe angefangen und bin diesen Weg gegangen:
<?php
$blogusers = get_users( 'orderby=post_count' );
foreach ( $blogusers as $user ) {
echo '<li>' . esc_html( $user->display_name ) . '</li>';
}
?>
Dies scheint jedoch nur alle Benutzer zurückzugeben, die für das Blog registriert sind, und nicht diejenigen, die einen Beitrag geleistet haben, sodass ich es mit Sicherheit nicht richtig mache.
Ich bin neu in WordPress und PHP, daher wäre jede Hilfe willkommen.
Sie müssen den Parameter who
in get_users
einstellen.
<?php
$blogusers = get_users( 'orderby=post_count&who=authors' );
foreach ( $blogusers as $user ) {
echo '<li>' . esc_html( $user->display_name ) . '</li>';
}
?>
EDIT
Scheint, als hätte ich zu schnell geantwortet. Der Code in Ihrer Frage und in meiner Antwort ist der Beginn dessen, was Sie erreichen möchten.
Ich habe jetzt keine Zeit, Code zu schreiben, um Rugby zu schauen, aber hier ist der vollständige Code, der in den vierundzwanzig Jahren verwendet wurde, um Autoren und ihre Beitragsanzahl anzuzeigen. Hoffe das hilft
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;
}
Nennen Sie es einfach in Ihren Vorlagendateien als
twentyfourteen_list_authors();
Es gibt in WordPress keine Standardmethode, um diese Aufgabe auszuführen. Wie Pieter Goosen hervorhob, gibt es das Argument who
für get_users()
, das Benutzer zurückgibt, die können posten, nicht die Benutzer, die haben gebucht.
Sie können jedoch 'pre_user_query'
verwenden, um eine JOIN
-SQL-Klausel hinzuzufügen, mit der nur Benutzer abgerufen werden, die über mindestens einen Beitrag verfügen.
Um ehrlich zu sein, wenn Sie Benutzer abfragen, die sie nach Anzahl der Posts bestellen, wird der Join bereits von WordPress erstellt, jedoch mit einem OUTER LEFT JOIN
, sodass auch Benutzer ohne Posts zurückgegeben werden. Sie müssen also nur den OUTER LEFT JOIN
durch einen INNER JOIN
ersetzen.
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' );
Seit der Version 4.3.0
können Sie den Parameter has_published_posts
für den Funktionsaufruf get_users();
angeben.
Übergeben Sie eine
array
von Beitragstypen, um die Ergebnisse an Benutzer zu filtern, die Beiträge in diesen Beitragstypen veröffentlicht haben.true
ist ein Alias für alle öffentlichen Beitragstypen.
Beispiel
if ( $users = get_users( array(
'orderby' => 'nicename',
'order' => 'ASC',
'has_published_posts' => array( 'post' ),
'blog_id' => absint( get_current_blog_id() )
) ) ) {
print_r( $users );
}
Ressourcen