web-dev-qa-db-ja.com

現在のユーザーによって作成されたカスタム投稿タイプの数を取得します

現在のユーザーのカスタム投稿タイプで公開された投稿の数を取得しようとしています(プロフィールページに表示するため)。

私はこれをフォーラムで見つけました:

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

しかし、そのような種類の投稿が間違いなく公開されていても、それは私に大きなFAT ZEROを与えるだけです。私は何を間違っていますか、そしてこれを行うより良い方法はありますか?

2
Eckstein

私は同じ答えを探している間にこのスレッドを見つけたので、新しい答えを投稿しています。ここでの解決策は最適ではありませんでした。

post_type引数は、投稿タイプの 文字列 または array にすることができます。

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

あなたの目的のためにget_posts()の代わりにquery_posts()を使うことをお勧めします。

2次リスト(例えば、ページ下部の関連記事のリスト、サイドバーウィジェットのリンクのリスト)を作成するには、 WP_Query の新しいインスタンスを作成するか、 get_postsを使用してください。 ()[ソース]

それはまた今より簡単に見える:)

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

さて、もっとグーグルした後、これはMySQLを使わずに直接データベースに飛び込むことなく機能するようです:

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

私のための作家のプロフィールでこれは素晴らしい作品(ait-dir-itemはカスタム投稿タイプ名です)

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

$ wpdbもグローバルとして宣言し、そのプレフィックスメソッドを使用する必要があります。

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