サポート » 使い方全般 » ログインユーザがコメントしていない記事の一覧取得

  • 解決済 sserp-w

    (@sserp-w)


    皆様、はじめまして。
    考え方が間違えているのか、どうしてもできません。
    お知恵お貸しください。

    投稿されている公開記事で、自分が(ログインユーザーが)コメントをいれていない記事だけを一覧で取得して表示できるかやってみました。
    あわせて、その内、自分が投稿していない記事を条件として加える事で、自分がコメントしていない他人の記事だけ=見ていない記事=未読記事の一覧として取得できるようにと考えました。

    まずは、
    1、ログインユーザを取得し、格納
    2、コメント一覧を取得し、
    3、そこから自分がコメントしていない記事 & 自分が投稿していない記事を抽出
    4、その結果分の投稿IDを取得して記事情報を表示
    と考えてみました。

    <?php global $current_user; get_currentuserinfo(); ?>
    <?php $user_ID = get_current_user_id(); ?>
    <?php if (have_posts()) while (have_posts()) : the_post(); ?>
    <?php
    $comments = get_comments(array(
    ‘status’ => ‘approve’,
    ‘author__not_in’ => $current_user->ID . “\n”,
    ‘post_author__not_in’ => $current_user->ID . “\n”,
    ‘type’ => ‘comment’
    ));
    foreach($comments as $comment):
    $post = get_post($comment-> comment_post_ID);
    ?>

    これで条件は満たされていると思ったのですが、よくよく考えると、一つの記事に対して別ユーザと自分のコメントが2つある場合、コメント一覧としては2つが対象となり、別ユーザのコメントを基準に、自分がコメントした記事であっても残って表示されてしまいます。
    ここで出た結果から、さらに自分がコメントしている記事を対象から外す条件付けは何か可能でしょうか。
    そもそも、考え方の入り口を間違えていますでしょうか?

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

    *自宅サーバでのテストのためリンクが貼れません。ご了承ください。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • 考え方だけですが

    1. get_posts() を使って投稿を取得。条件は「公開されていて」「作成者が自分ではない」。
    2. get_posts() で取得した投稿リスト(配列)に対してループを回す。ひとつの投稿を A とする。
    3. get_comments() でコメントを取得。条件は「コメントがついた投稿が A で」「作成者が自分」。
    4. get_comments() で取得したコメントリスト(配列)の個数を数えて、ゼロなら A が目的の投稿です。

    gblsm 様

    早速のご連絡ありがとうございました。
    考え方を教えて頂いたので、そちらで挑戦中です。

    固定ページで記事一覧を取得して表示しようと思い、get_posts() を使うのですが、

    <?php if (have_posts()) while (have_posts()) : the_post(); ?>
    <?php
    $postslist = get_posts(”);
    foreach ($postslist as $post) : setup_postdata($post);
    ?>

    設定で10件表示するにしていても、なぜか5件しか表示できず、表示件数の指定は他ではやっていないはずなのに。。。
    何か他の事が原因で表示ができないようで、今、止まっております。。。

    自立解決まで少し時間かかってしまうかもです、すみません。

    なんどもスミマセン
    codexを読み直して、書き直したらget_posts()で取り急ぎ一覧取得できました

    <?php $args = array(
      'posts_per_page'   => 10,
      'orderby'          => 'post_date',
      'order'            => 'DESC',
      'post_type'        => 'post',
      'post_status'      => 'publish',
      'suppress_filters' => true ); ?>
    <?php $myposts = get_posts( $args ); ?>
    <?php foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
    
    <li>
        表示したい内容
    </li>
    <?php endforeach; wp_reset_postdata(); ?>

    目的のコメント含めて続けます
    m(__)m

    sserp-wさん、コードの前後を逆シングルクォート(codeボタンで入力できます)で囲んで投稿すると、表示が崩れず見やすいですよ。

    gblsm 様

    お世話になります。
    アドバイス頂いた内容で考え直して、できました!!
    推奨されている書き方と少し違うかもしれませんが、ご報告とさせて頂きます。

    <?php $user_ID = get_current_user_id(); ?>
    <?php echo $user_ID; ?></br>
    <?php $args = array(
      'posts_per_page'   => -1,
      'author'  => -$user_ID,
      'orderby'          => 'post_date',
      'order'            => 'DESC',
      'post_type'        => 'post',
      'post_mime_type'   => '',
      'post_status'      => 'publish',
      'suppress_filters' => true ); ?>
    
    <?php $myposts = get_posts( $args ); ?>
    <?php foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
    
    <?php if( $comments = get_comments(array('status'=>'approve','post_id'=>$post->ID,'author__in'=>$user_ID)) ) : ?>
      <?php
      foreach($comments as $comment):
      $post = get_post($comment->comment_post_ID);
      ?>
    <?php endforeach; ?>
    <?php endif; ?>
    
    <?php $count1 = count($comments); ?>
    <?php
    if($count1  == 0){
    the_title();
    	}
    ?>
    
    <?php endforeach; wp_reset_postdata(); ?>

    「配列の個数を数える」って発想がまったくなく、やっと出来て嬉しいです!!
    (最初はちゃんと自力でと思い、一人2週間ぐらい悩んでいたので、、、)
    ありがとうございました!

    *先の表示崩れ、失礼しました。

    内側のforeach($comments…)は、無くても
    結果同じではありませんか?

    ともかく解決してよかったです。これからもチャレンジしてくださいね。

    gblsm先生
    はい。。なくても、結果同じでした。
    また、お題見つけて挑戦します!ありがとうございました!

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「ログインユーザがコメントしていない記事の一覧取得」には新たに返信することはできません。