it-swarm.com.de

Abfrage, ob der Autor die maximale Anzahl von Beiträgen hat (folgender Beitragstyp)

Ich muss den Autor informieren, der die maximale Anzahl von Posts hat (benutzerdefinierter Post-Typ).

Hier ist der Code, mit dem ich versucht habe, das Ergebnis zu erhalten.

 $author_query = new WP_User_Query(array ( 
                           'orderby' => 'post_count', 
                           'order' => 'DESC', 
                ));

$authors = $author_query->get_results();

foreach ( $authors as $author ) {
    echo $author->ID;
    echo $author->display_name;
}

Das Ergebnis wird als Post-Count von normalen Posts abgerufen. Hier habe ich einen benutzerdefinierten Beitragstyp anstelle des Standardbeitrags. Ich muss das Ergebnis basierend auf der Anzahl der Posts meines benutzerdefinierten Post-Typs erhalten.

2
prinz

Sie können mit der folgenden Abfrage versuchen, wo die Autorendaten sowie die Anzahl der Beiträge abgerufen werden können.

$sql = "SELECT SQL_CALC_FOUND_ROWS wp_users.ID,post_count FROM wp_users RIGHT JOIN (SELECT post_author, COUNT(*) as post_count FROM wp_posts WHERE ( ( post_type = 'custom-post-type' AND ( post_status = 'publish'  ) ) ) GROUP BY post_author) p ON (wp_users.ID = p.post_author) WHERE 1=1 ORDER BY post_count DESC";

$result = $wpdb->get_results($sql,OBJECT);
print_r($result); 
2
Jomol MJ

Da das Attribut post_count in der Benutzertabelle die Gesamtzahl der Beiträge für den Benutzer enthält und in keiner Weise durch den Beitragstyp geteilt wird, besteht meines Erachtens die einzige Möglichkeit für Sie, eine benutzerdefinierte SQL-Abfrage auszustellen.

<?php
//Get 10 most popular authors for post type
$topAuthors = $wpdb->get_results(
"
SELECT post_author
FROM $wpdb->posts WHERE post_type = 'topic'
GROUP BY post_author
ORDER BY COUNT(*) DESC
LIMIT 0,10
"
, OBJECT_K);

Sie können die Reihenfolge ändern und die Attribute auf die SQL-Abfrage beschränken, um genau das zu erreichen, was Sie benötigen.

Sobald Sie die Autoren-IDs basierend auf Ihren Kriterien haben, können Sie mit dem Argument include weitere Abfragen durchführen.

<?php
$authors = new WP_User_Query(array(
    'include' => array_keys($topAuthors)
));
foreach( $authors->get_results() as $author ) {
    echo $author->ID;
    echo $author->user_login;
}
1
Philip Downer

Es gibt tatsächlich einen dokumentierten Abfrageparameter mit dem Namen has_published_posts, der eine Reihe von Beitragstypen für WP_User_Query akzeptiert.

has_published_posts (boolean/array) - Übergeben Sie ein 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. Standard ist null. Seit Version 4.3.

Sie sollten daher nur in der Lage sein zu rennen

$author_query = new WP_User_Query(array( 
    'orderby' => 'post_count', 
    'order' => 'DESC', 
    'has_published_posts' => array('custom_post_type')
));
0
brianjohnhanna