web-dev-qa-db-fra.com

Compter les messages par type, y compris les brouillons et les messages en attente

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')"
1
She Hulk

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;
}
0
brasofilo