• 解決済 ShelteringBliss

    (@shelteringbliss)


    query_postsでトップページに特定カテゴリーの新着リストを表示させています。

    query_posts('posts_per_page=5&cat=10');

    このリストからパスワード保護をかけた投稿を除外するには、どうすれば良いのでしょうか。
    post_status=publishでは、パスワード保護の投稿も公開扱いになるようでリストから除外できませんでした。

    解決方法をご存知の方がいらっしゃいましたらご教示いただけると幸いです。
    よろしくお願い致します。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • こんにちは

    ループの中で

    <?php
      while ( have_posts() ) : the_post(); 
    
      if(empty($post->post_password)){
       echo get_the_title()."<br>";
      }
      endwhile;
    ?>

    等として、wp-postsテーブルの post_password フィールドの値を確認しながらループするという事でどうでしょうか

    トピック投稿者 ShelteringBliss

    (@shelteringbliss)

    nobitaさん、ありがとうございます。
    教えていただいたコードを試してみたところ、除外は出来たのですが
    パスワード保護の記事数分、表示件数が減ってしまいます。
    (新着5件のうち、パスワード保護2件→リストに表示されるのは3件)

    パスワード保護の投稿を取り除いた上で、posts_per_pageで指定した数を表示できるようにする、という方法はありますでしょうか?
    ご助言をよろしくお願い致します。

    こんにちは

    未検証ですけど、ループ内で処理しているので、やはりループ内で

    <?php
    $i = 0;
    $result = "";
      while ( have_posts() ) : the_post(); 
    
      if(empty($post->post_password) and  $i < 5){
       $result .= get_the_title()."<br>";
       $i++;
      }else{
       echo $result;
       break;
     }
      endwhile;
    ?>

    functions.php で

    function my_posts_where($where){
      $where .= " AND post_password = ''";
      return $where;
    }

    テンプレートで

    add_filter('posts_where','my_posts_where');
    $paged = get_query_var('paged') ? get_query_var('paged') : 1;
    query_posts('post_type=post&cat=10&posts_per_page=5&paged='.$paged);
    remove_filter('posts_where','my_posts_where');

    でうまくいきそうです。

    function my_posts_where($where){
      global $wpdb;
      $where .= " AND $wpdb->posts.post_password = ''";
      return $where;
    }

    こっちの方がいいかもしれません。

    トピック投稿者 ShelteringBliss

    (@shelteringbliss)

    nobitaさん、pluto1234さん、ありがとうございます。
    おかげさまで希望通りのリスト表示が出来ました。
    感謝です!

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「パスワード保護をかけた投稿について」には新たに返信することはできません。