J'avais cette fonction qui compte le nombre de posts par type (tiré de wordpress codex)
function count_user_posts_by_type($userid, $post_type) {
global $wpdb;
$where = get_posts_by_author_sql($post_type, TRUE, $userid);
$count = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->posts} $where" );
return apply_filters('get_usernumposts', $count, $userid);
}
et je l'ai changé afin d'afficher même les postes avec le statut "brouillon" et "en attente".
function count_user_posts_by_type($userid, $post_type) {
global $wpdb;
$where = get_posts_by_author_sql($post_type, TRUE, $userid);
$count = $wpdb->get_var( "SELECT COUNT(*)
FROM {$wpdb->posts} $where
AND (post_status = 'publish' OR post_status = 'draft' OR post_status = 'pending')");
return apply_filters('get_usernumposts', $count, $userid);
}
mais ça ne marche pas. Si je répète la fonction comme ceci
echo count_user_posts_by_type(wp_get_current_user()->ID, 'percorso');
Je peux voir qu'il ne compte que les posts publiés. Quel est le problème avec ce que j'ai écrit? Merci!
EDIT: comme suggéré, j'ai effectué un var_dump pour SELECT COUNT etc. voici ce que j'ai
string(216)
"SELECT COUNT(*) FROM mi_posts
WHERE post_author = 1
AND post_type = 'percorso'
AND (post_status = 'publish' OR post_status = 'private')
AND (post_status = 'publish' OR post_status = 'draft' OR post_status = 'pending')"
Il n'est pas nécessaire d'utiliser $wpdb
, un simple get_posts
peut le gérer. Vérifiez WP_Query
la liste complète des paramètres.
function count_user_posts_by_type( $userid, $post_type )
{
$args = array(
'numberposts' => -1,
'post_type' => $post_type,
'post_status' => array( 'publish', 'private', 'draft', 'pending' ),
'author' => $userid
);
$count_posts = count( get_posts( $args ) );
return $count_posts;
}