サポート » 使い方全般 » ユーザーの投稿数(カスタムポスト)でランキング表示したい

  • 解決済 moritokawa

    (@moritokawa)


    お世話になっております。

    複数人が記事を投稿するサイトにて
    記事数が多い順にリスト表示したいのですが、うまくいきません。

    投稿者名(記事数)
    投稿者名(記事数)
      ・
      ・

    以前のトピックで

    [解決済み] ユーザーの投稿数でランキング表示したい

    を参考に、投稿(post)の表示はできているのですが、

    <?php
    $args = array(
        'orderby' => 'post_count',
        'order'   => 'DESC',
    );
    
    $users = get_users($args);
    if (!empty($users)) :
        echo '<ul>';
        foreach ($users as $user) :
    	$my_posts = get_posts('author='.$user->ID);
    	$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;
    ?>

    post_typeの指定をどこに入れるのかが分かりません。

    よろしくお願いいたします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • get_posts の引数で、post_typeを設定してあげればよいと思います。

    get_posts の引数については公式ドキュメントを参照してください。
    http://wpdocs.sourceforge.jp/テンプレートタグ/get_posts

    回答ありがとうございます。

    get posts の引数にpost_type(staffcolumn)を設定してみたのですが、
    うまくいきません。
    箇所が間違っていますでしょうか?

    <?php
    $args = array(
        'orderby' => 'post_count',
        'order'   => 'DESC',
    );
    $users = get_users($args);
    if (!empty($users)) :
        echo '<ul>';
        foreach ($users as $user) :
    	$my_posts = get_posts (
    	array(
    	'author'=> $user->ID,
    	'post_type' => 'staffcolumn'));
    	$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;
    ?>

    初歩的なことで申し訳ございませんm(_ _)m

    ひとまず、↓のコードで試してもらえますか?

    foreach ($users as $user) :
    	$my_posts = get_posts (
    	array(
    	'author'=> $user->ID,
    	'post_type' => 'staffcolumn'));
    	$n = count($my_posts);
    
    	echo $n;
        endforeach;

    get_posts のところがおかしいのか、それとも、以後の表示させる部分でおかしいのか、のチェックです。

    Fumito MIZUNO 様

    ありがとうございます!

    上記のコードで試してみて、すべて5と表示されていて、
    5以上が表示されなかったので、調べたところ、
    ‘posts_per_page’ => -1, //全件表示
    をget_postsに追加することで無事表示されるようになりました!m(_ _)m

    ありがとうございます!!

    <?php
    $args = array(
        'orderby' => 'post_count',
        'order'   => 'DESC',
    );
    $users = get_users($args);
    if (!empty($users)) :
        echo '<ul>';
        foreach ($users as $user) :
    	$my_posts = get_posts (
    	array(
    	'author'=> $user->ID,
    	'posts_per_page'   => -1,
    	'post_type' => 'staffcolumn'));
    	$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;
    ?>

    ですが、現状、並び順がpostの投稿が多い人順になっております。
    post_type(staffcolumn)の投稿数が多い人順に並べるには、どこで設定すればいいでしょうか?

    $args の
    ‘orderby’ => ‘post_count’,
    ‘order’ => ‘DESC’,
    を消してみたり、
    $my_posts 、$n 、の引数に追加してみたのですが、うまくいきません。

    何度も恐れ入りますが、よろしくお願いいたしますm(_ _)m

    get_usersが投稿タイプpost決めうちっぽいので、
    カスタム投稿で並べるとなると、自分で並べ替えないとたぶん無理ですね。

    https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/user.php#L559

    Fumito MIZUNO 様

    返信ありがとうございます。

    リンク先拝見しました。

    やはり、簡単にはできそうにないですね。
    私の知識では難しそうなので、
    並び替えは今後の課題としたいと思います。

    丁寧に教えていただきありがとうございました
    ほんとうに助かりましたm(_ _)m

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「ユーザーの投稿数(カスタムポスト)でランキング表示したい」には新たに返信することはできません。