web-dev-qa-db-fra.com

Obtenir le nombre de type d'article personnalisé créé par l'utilisateur actuel

J'essaie d'obtenir le nombre de publications publiées dans un type de publication personnalisé pour l'utilisateur actuel (à afficher sur une page de profil).

J'ai trouvé ça ici sur les forums:

<?php
global $wp_query;
$curauth = $wp_query->get_queried_object();
$post_count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = '" . $curauth->ID . "' AND post_type = 'user_video' AND post_status = 'publish'");
?>

Mais, cela me donne juste un gros ZERO bien qu’il y ait définitivement des articles de ce type publiés. Qu'est-ce que je fais de travers et y a-t-il une meilleure façon de le faire?

2
Eckstein

Je poste une nouvelle réponse parce que j'ai trouvé ce fil tout en cherchant la même chose et que les solutions proposées ici n'étaient pas optimales.

L'argument post_type peut être un string ou un array of post types.

function custom_count_posts_by_author($user_id, $post_type = array('post', 'page'))
{
    $args = array(
        'post_type' => $post_type,
        'author'    => $user_id,
        'post_staus'=> 'publish',
        'posts_per_page' => -1
    );

    $query = new WP_Query($args);

    return $query->found_posts;
}
4
gyo

Je suggérerais d'utiliser get_posts() au lieu de query_posts() pour vos besoins.

Pour créer des listes secondaires (par exemple, une liste de publications connexes au bas de la page ou une liste de liens dans un widget de barre latérale), essayez de créer une nouvelle instance de WP_Query ou utilisez get_posts () . [la source]

Cela semble aussi plus simple maintenant :)

echo count( get_posts( array( 
    'post_type' => 'user_video', 
    'author'    => get_current_user_id(), 
    'nopaging'  => true, // display all posts
) ) );
5
Michal Mau

OK, après plus de Googleing, cela semble fonctionner sans avoir à utiliser MySQL et plonger directement dans la base de données:

<?php 
        $authorid = get_current_user_id();
        query_posts(array( 
            'post_type' => 'user_video',
            'author' => $authorid,
        ) ); 
            $count = 0;
            while (have_posts()) : the_post(); 
                $count++; 
            endwhile;
            echo $count;
        wp_reset_query();
    ?>
2
Eckstein

Pour moi, le profil des auteurs fonctionne très bien (ait-dir-item est un nom de type de message personnalisé)

<?php  
$idecko = get_the_author_meta( 'ID' );
echo count_user_posts( $idecko, 'ait-dir-item' ); ?>     
1
Tomas

Vous devez également déclarer $ wpdb en tant que global et utiliser sa méthode de préfixe.

<?php
global $wp_query, $wpdb;
$curauth = $wp_query->get_queried_object();
$post_count = $wpdb->get_var("SELECT COUNT(ID) FROM ".$wpdb->prefix."posts WHERE post_author = '" . $curauth->ID . "' AND post_type = 'user_video' AND post_status = 'publish'");
?>
1
Andrew Bartel

https://codex.wordpress.org/Function_Reference/count_user_posts

<?php $user_post_count = count_user_posts( $userid , $post_type ); ?>