サポート » 使い方全般 » メインループのデフォルト表示数を10件以外にしたい

  • いつもお世話になっております。

    通常、ループのデフォルトでの表示件数は10件だと思いますが、
    これを「すべて表示」に変えたいのですが、

    どこかのphpか、テーマ内のfunctions.phpかで変更できるでしょうか。

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

14件の返信を表示中 - 1 - 14件目 (全14件中)
  • query_posts( 'posts_per_page=-1' );

    これではだめなんでしょうか?

    トピック投稿者 yossy8

    (@yossy8)

    ご提案ありがとうございます。

    query_posts( 'posts_per_page=-1' );
    ↑試しましたが、だめでした。

    ちょっと説明不足だったかもしれません、すみません。
    実は、なぜこれをしたいかといいますと、
    カスタム投稿タイプを利用してまして、
    そのカスタム投稿タイプのアーカイブページのループが、
    現在、デフォルトの10件のみの表示になっており、
    それを「すべて表示」させたいのですが、

    query_posts('showposts=-1');
    などを記述すると、カスタム投稿タイプというのを無視して、
    通常の投稿の範囲だけでの「すべての表示」となってしまいます。
    ですので、デフォルトの10件表示というのを変えてしまえばよいかと思った次第です。

    トピック投稿者 yossy8

    (@yossy8)

    もしかして・・・

    ループの記述の上に、

    <?php $catinfo = get_term_by('slug',$term,$taxonomy); ?>

    と記述してます。
    これに、
    query_posts( ‘posts_per_page=-1’ );
    を足せばよいでしょうか?
    もしそれでよさそうであれば、
    PHPの勉強不足で申し訳ありませんが、
    足した場合の、完成形を教えてもらえるでしょうか。

    モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    足した場合の、完成形を教えてもらえるでしょうか。

    それではためになりませんので、限りなく正解に近いヒントを。
    引数はarray、もしくは&でつなげて複数指定できます。

    テンプレートタグ/query posts – WordPress Codex 日本語版 :4.14 引数の組み合わせ

    ちなみにget_term_byとquery_postsは役割の違う関数なので、

    <?php $catinfo = get_term_by(‘slug’,$term,$taxonomy); ?>

    と記述してます。
    これに、
    query_posts( ‘posts_per_page=-1’ );
    を足せば

    というのはハズレです。query_postsに、複数の引数を指定してください。

    モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    ちなみに今回の質問そのものとは逸れますが、当フォーラムの世話役ユーザーであるgatespaceさんが「query_postsを使わずに表示件数を変える」という旨の記事を書いていますので、
    今回の質問が解決したら、こちらの方法もよかったら参考にしてみてください。

    WordPressでホームやアーカイブ毎に表示条件を変える(is_main_query と pre_get_posts フック)

    トピック投稿者 yossy8

    (@yossy8)

    ご教授ありがとうございます。

    ちょっと考えましたが、、、
    単純な&でつなぐ複数指定はわかるのですが、

    posts_per_page=-1&

    のあとに、
    <?php $catinfo = get_term_by(‘slug’,$term,$taxonomy); ?>
    をどうくっつければよいか、わかりません(汗)

    <?php $catinfo = get_term_by('slug',$term,$taxonomy); ?>

    この後に何が書いてあるかも分からないので何とも言えないですが、
    ループするには何をループするかっていう指定があるはずです。
    何も指定しないならデフォルトですが、
    その条件に、記事が何件とか指定するのが、query_postsで、

    引数はarray、もしくは&でつなげて複数指定できます。

    ということです。

    is_main_query は、3.04じゃ使えないようなので、

    3.3の新しい関数 is_main_query を使おうを参考にして、

    function tax_display_all_articles( $wp_query ) {
        global $wp_the_query;
        if ( ( $wp_the_query === $wp_query ) && $wp_query->is_tax() ) {
            $wp_query->set( 'posts_per_page', -1 );
        }
    }
    add_action( 'pre_get_posts', 'tax_display_all_articles' );

    なんてどうかなと思いました。(試してません

    トピック投稿者 yossy8

    (@yossy8)

    function tax_display~~
    は、functions.php に記述すればよいのですよね?
    試してみましたが、サイトが真っ白になってしまいました。

    <?php $catinfo = get_term_by('slug',$term,$taxonomy); ?>
    に何が書いてあるか、補足します。

    まず、アーカイブ用のphpに、

    <?php $catinfo = get_term_by('slug',$term,$taxonomy); ?>
    <h3><?php echo $catinfo->name; ?></h3>
    <?php echo category_description(); ?>
    <?php get_template_part('loop-taikai-r-cat-list'); ?>

    と記述し、さらに、loop-taikai-r-cat-list.php に、ループの指示で、

    <?php if (have_posts()) : ?>
    	ループの上部部分
    	<?php while (have_posts()) : the_post(); ?>
    		<?php if ($post_counter %2 == 1) : ?>
    ループの中身Aパターン
    			<?php else : ?>
    ループの中身Bパターン
    			<?php endif; ?>
    		<?php $post_counter++; ?>
    	<?php endwhile; ?>
    	ループの下部部分
    	<?php else : ?>
    		表示するものがないときの表示
    <?php endif; ?>

    と、こんな感じです。

    トピック投稿者 yossy8

    (@yossy8)

    ネットでいろいろ調べていましたら、
    意外なところで解決策を見つけました。

    ものすごく基本といいますか、初期設定といいますか・・・

    管理画面の「設定」

    表示設定

    1ページに表示する最大投稿数

    が、デフォルトのまま「10」になっていたのを「100」などに増やしたら・・・解決しました。

    いろいろご教授くださいました、
    sz1320様
    mypacecreator様
    ありがとうございました。m(_ _)m

    モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    解決済みになっていましたが補足を。

    デフォルトのまま「10」になっていたのを「100」などに増やしたら・・・解決しました。

    全件表示なら、100でもいいのですが101件目があったら困るので
    「-1」を入れればOKです。
    今回は、カスタム投稿タイプのアーカイブだけ全件、ということでテーマファイルをいじる方向でお伝えしました。

    ちなみに話を戻しますが

    posts_per_page=-1&

    のあとに、
    <?php $catinfo = get_term_by(‘slug’,$term,$taxonomy); ?>
    をどうくっつければよいか、わかりません(汗)

    get_term_byをくっつけるのではないですよ。
    get_term_byのことは忘れていただいて、

    query_posts( array(
         'post_type' => 'gallery', //表示させたいカスタム投稿タイプ
         'posts_per_page' => -1 //表示件数( -1 = 全件 )
       ));

    これが私のお伝えしたかった、「引数を複数」という意味です。

    トピック投稿者 yossy8

    (@yossy8)

    mypacecreator様、補足ありがとうございます。

    とりあえず、全件表示はできたのですが、別の問題が出てきましたので、
    やはり条件分岐でしっかりやりたい方向になりました。

    そこで、

    <?php $catinfo = get_term_by('slug',$term,$taxonomy); ?>

    query_posts( array(
         'post_type' => 'gallery', //表示させたいカスタム投稿タイプ
         'posts_per_page' => -1 //表示件数( -1 = 全件 )
       ));

    に変えてみたのですが、ちょっと新たな?問題が出ました。
    ひとまず、たしかに、指定した「カスタム投稿タイプ」で「全件表示」はできたのですが、

    カスタム投稿タイプの中で、カスタム分類でカテゴリー分けをしてまして、
    各カテゴリーそれぞれのアーカイブで、
    まったく同じ表示(カテゴリー関係なく指定した投稿タイプを全件表示)になってしまいました。

    カスタム投稿タイプは「taikai-r」で、
    カスタム分類のスラッグは「taikai-r-cat」としてます。

    アーカイブのURLは、
    http://www.xxxxx.com/taikai-r-cat/カテゴリー名
    といった感じです。

    カスタム分類もしているということが説明不足で申し訳ありません。
    この場合、どうしたらよいものでしょうか。

    「解決済み」にしているにも関わらず、質問を続けてしまいすみません。

    モデレーター gatespace

    (@gatespace)

    ※未解決に戻しました。問題が解決したなら再度「解決済み」に変更してください。

    yossy8 さんのやりたい事をまとめると、カスタム投稿タイプのアーカイブと、カスタム分類の各ターム(カテゴリー)のアーカイブ、どちらでもすべての記事を表示したい、という事でしょうか?

    ひとまず、テンプレート階層をご理解いただけてますか?

    前提条件としてカスタム投稿タイプ(例:gallery)を作成時に「has_archive」が true になっていれば、カスタム投稿タイプのアーカイブに最優先で使われるテンプレートは、archive-gallery.php です。
    既に post_type の指定は済んでいるので、当該テンプレートファイルには

    query_posts( array(
         'posts_per_page' => -1 //表示件数( -1 = 全件 )
       ));

    と書くようになります。

    同じようにカスタム分類のアーカイブで使われるテンプレートは
    カスタム分類(例:taikai-r-cat)すべてで共通でよければ taxonomy-taikai-r-cat.php で、ここでも既にカスタム分類の指定は済んでいるので、

    query_posts( array(
         'posts_per_page' => -1 //表示件数( -1 = 全件 )
       ));

    と書くだけで大丈夫です。

    なんでだめだったのかは query_posts のページを良く読んでみてください。

    あと、せっかく mypacecreatorさんに私のブログをご紹介いただいたので、
    そちらの方法でのヒントも書いてみますね。

    add_action( 'pre_get_posts', 'foo_modify_main_queries' ); // pre_get_postsにフック
    // フック時に使う関数
    function foo_modify_main_queries ( $query ) {
      $taxonomy_exist = taxonomy_exists( 'taikai-r-cat' );
      if ( ! is_admin() && $query->is_main_query() ) { // 管理画面以外 かつ メインクエリー
        // カスタム投稿タイプ「gallery」のアーカイブ または カスタム分類の各タームのアーカイブのとき
        if ( $query-> is_post_type_archive( 'gallery' ) or $query-> is_tax()  ) {
          $query->set( 'post_per_page', -1 ); // すべて表示
      }
    }

    または3.2以前の場合はsz1320さんの紹介されているブログ記事を参考に書き換えてみてください。

    トピック投稿者 yossy8

    (@yossy8)

    gatespace様

    未解決に戻していただいてありがとうございます。
    (スレッドを新しくした方がよいのかとも思ってたところでした)

    まとめていただいてありがとうございます。ほぼご察しのとおりです。
    やりたいことに少しだけ追加があります。
    表示件数を「すべて」にするとともに、年別の指定も必要になりました。

    テンプレート階層の確認や、
    なんでだめだったか「query_posts」のページをみて、
    再度試してみます。

    ひとまずお礼まで。ありがとうございます。

    モデレーター gatespace

    (@gatespace)

    > yossy8 さん。
    一度にやろうとすると、「うまくいかない」「思った通りに行かない」ことがあるので、
    ひとまず「全件表示」部分にチャレンジしてみてください。

    ここができたら次に「年別の指定」に進んでみてください。
    yossy8さんのいう「年別の指定」も、見ている人からすると
    「記事一覧で年ごとに区切りを入れる」のか「年別アーカイブが必要」なのか、どちらとも受け取れます。
    フォーラム的には新しく投稿してもらって、その際、
    「このスレッドでここまでできました(リンク付き)、今はこうしたいです」という
    具体的な「やりたいこと」を書いてもらえると回答がつきやすいと思いますよ。

14件の返信を表示中 - 1 - 14件目 (全14件中)
  • トピック「メインループのデフォルト表示数を10件以外にしたい」には新たに返信することはできません。