web-dev-qa-db-fra.com

Requête pour obtenir l'auteur ayant le nombre maximal de publications (type de publication personnalisé)

Je dois obtenir les informations sur l'auteur, qui ont un nombre maximal de messages (type de message personnalisé).

Voici le code que j'ai essayé d'obtenir le résultat.

 $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;
}

Le résultat devient le post-décompte des publications normales. Ici, j'ai un type de message personnalisé au lieu d'un message par défaut. Je dois obtenir le résultat en fonction du nombre de publications de mon type de publication personnalisé.

2
prinz

Vous pouvez essayer avec la requête suivante, où les données de l'auteur ainsi que le nombre de publications peuvent être récupérées.

$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

Étant donné que l'attribut post_count dans la table users comprend le nombre total de publications pour l'utilisateur et n'est en aucun cas divisé par le type de publication, je pense que le seul moyen serait d'émettre une requête SQL personnalisée.

<?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);

Vous pouvez modifier l'ordre et limiter les attributs à la requête SQL pour cibler exactement ce dont vous avez besoin.

Une fois que vous avez l'ID auteur en fonction de vos critères, vous pouvez interroger davantage à l'aide de l'argument include.

<?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

Il existe en fait un paramètre de requête documenté appelé has_published_posts qui accepte un tableau de types de publication pour WP_User_Query.

has_published_posts (boolean/array) - Transmet un tableau de types d'articles pour filtrer les résultats aux utilisateurs ayant publié des articles dans ces types d'articles. true est un alias pour tous les types de publications publiques. La valeur par défaut est null. Depuis la version 4.3.

Vous devriez donc pouvoir exécuter

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