サポート » 使い方全般 » ユーザーの投稿数で直近〇日分でランキング表示したい

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • CG

    (@du-bist-der-lenz)

    期待しているのは、教授ですよね。過去のトピックに、期間を絞って取得する、というものはなかったでしょうか。

    $sixty_days_ago = date(‘Y-m-d 0:0:0’, strtotime(‘-60 day’));
    どこが、どのようにうまくいってないのかわかりませんけど

    • この返信は9 ヶ月、 1 週前に  npssl さんが編集しました。

    すみません、言葉が間違えていました。
    全くの初心者なので、コードの書き方を教えてほしかったです。
    申し訳ございません。

    このコードで実行したところ
    今までの全ての投稿の数でユーザーのランク付けされ
    指定した期間内のランキングとして機能しませんでした。
    期間の指定は無視されている状態です。

    投稿数は、指定した期間内の数の表示ですが・・・

    現在のコードを見やすくしてください。
    コードタグで囲めばコードが読みやすくなります。

    こんにちは

    get_users() で投稿数(post_count)に対して期間を指定することは難しいと思います。
    $wpdb->get_results() で SQL クエリを実行して取得する方がまだ簡単かなと思います。

    例:

    <?php
    $three_month_ago = date( 'Y-m-d 00:00:00', strtotime( '-3 month' ) );
    
    $sql = "SELECT * 
    FROM {$wpdb->users} 
    LEFT JOIN (SELECT post_author, COUNT(*) as post_count FROM {$wpdb->posts} WHERE (post_type = 'post' AND post_status = 'publish' AND post_date >= %s) GROUP BY post_author) p ON ({$wpdb->users}.ID = p.post_author) 
    WHERE post_count IS NOT NULL 
    ORDER BY post_count DESC LIMIT 0, %d";
    
    $users = $wpdb->get_results( $wpdb->prepare( $sql, $three_month_ago, 5 ) );
    if ( $users ) {
    	echo '<ul>';
    	foreach ( $users as $user ) :
    	    $n = $user->post_count;
    	    ?>
    		<li>
    	    <?php echo get_avatar( $user->ID, $size = '60' ); ?>
    		<a href="<?php echo get_author_posts_url( $user->ID ); ?>"><?php echo esc_html( $user->display_name ); ?></a>(<?php echo $n; ?>)
    	    <div class = "clear-left"></div>
    		</li>
    	<?php
    	endforeach;
    	echo '</ul>';
    }
    ?>

    失礼いたしました。
    以下のコードです。お願いいたします。

    <?php
    $three_month_ago = date('Y-m-d 0:0:0', strtotime('-3 month'));
    $args = array(
    'orderby' => 'post_count',
    'order' => 'DESC',
    'number' => 10,
    );
    $users = get_users($args);
    if (!empty($users)) :
    echo '<ul>';
    foreach ($users as $user) :
    $my_posts = get_posts(array(
    'numberposts'=>-1,
    'author'=> $user->ID,
    'date_query' => array(
            array(
            	'after'     => $three_month_ago,  //3ヶ月
            	'inclusive' => true
            ), 
        ))
    );
    $n = count($my_posts);
    ?>
    <li>
    <?php echo get_avatar( $user->ID, $size = '60'); ?>
    <a href="<?php echo get_author_posts_url( $user->ID); ?>"><?php echo esc_html($user->display_name); ?></a>(<?php echo $n; ?>)
    <div class = "clear-left"></div>
    </li>
    <?php
    endforeach;
    echo '</ul>';
    endif;
    ?>

    ishitaka さん

    ありがとうございます!
    望んでいた通りの表示が出来ました!

    他の皆さんも、ありがとうございました。

    • この返信は9 ヶ月、 1 週前に  kensukekun さんが編集しました。
    CG

    (@du-bist-der-lenz)

    コードの書き方、ではなく書いて欲しかったんですね。つまずいていそうなところを気づけることを大切にしています。簡単な表現で、はっきり尋ねることが気遣いさせないので、望んでいた情報が得やすいですよ。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「ユーザーの投稿数で直近〇日分でランキング表示したい」には新たに返信することはできません。