ワードプレス、カスタム投稿で、子タームに投稿した内容を一覧表示するコードを教えて下さい。


カスタム投稿タイプ
book

カスタムタクソノミー
bookcat

親カテゴリースラッグ
sf

子カテゴリースラッグ
japan
usa

http://WordPressのURL/bookcat/sf/japan/」にjapanカテゴリーだけの記事一覧も表示させたいのです。

テンプレートはtexonomy-bookcat.phpで表示したいと思っています。

http://q.hatena.ne.jp/1382440478で回答をいただきましたが、新規投稿すると上書きされ、最新の一投稿しか表示されない状態です。

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/11/06 20:36:13
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント100pt

取得する投稿件数の変更は次のパラメータで可能です。
「posts_per_page」に「-1」を指定しても、「nopaging」に「true」を指定してもどちらでも大丈夫です。

http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts#.E3.83.9A.E3.83.BC.E3.82.B8.E9.80.81.E3.82.8A.E5.BC.95.E6.95.B0

ページ送り引数

  • showposts (整数) - number of post to show per page. Deprecated in favor of 'posts_per_page'.
  • posts_per_page (整数) - number of post to show per page. Use 'posts_per_page'=>-1 to show all posts. Note if the query is in a feed, wordpress overwrites this parameter with the stored 'posts_per_rss' option. To reimpose the limit, try using the 'post_limits' filter.
  • nopaging (ブーリアン) - 全ての投稿を表示するかページ送りを使うかを指定します。デフォルトは'false'でページ送りを使います。
  • paged (整数) - number of page. Show the posts that would normally show up just on page X when using the "Older Entries" link.

...( 略 )

Show All Post

Display all posts in one page:

query_posts( 'posts_per_page=-1' );

Display all posts by disabling pagination:

query_posts( 'nopaging=true' );

「query_posts()」でメインクエリを変更しても可能ですが、次のように「pre_get_posts」でリクエスト前に変更する方法が推奨されています。

・「functions.php」

function taxonomy_bookcat_archive_request( $query ) {
    if ( $query->is_tax( 'bookcat' ) && $query->is_main_query() ) {
        // 以下の2つの内どちらか1つを使用してください。
        // $query->set( 'posts_per_page', '-1' );
        $query->set( 'nopaging', true );
    }
}
add_action( 'pre_get_posts', 'taxonomy_bookcat_archive_request' );

id:kamefactory

希望通りできました!!
本当にありがとうございます。

本当に素晴らしい説明をありがとうございます!
またよろしくお願いいたします。

2013/11/06 20:35:52
  • id:rouge_2008
    親タームの「sf」等のアーカイブは希望通り子タームごとにまとめた記事一覧が表示されていて、子ターム「japan」や「usa」のアーカイブで1件しか表示されないという状態なのでしょうか?
    現状ではどのコードを利用していますか?
    子タームの記事一覧を表示するコードが「<?php while ( have_posts() ) : the_post(); ?>」と「<?php endwhile; ?>」の間に記述されているか確認してみてください。

  • id:kamefactory
    >>親タームの「sf」等のアーカイブは希望通り子タームごとにまとめた記事一覧が表示されていて、子ターム「japan」や「usa」のアーカイブで1件しか表示されないという状態なのでしょうか?

    ↑そうです。
    親タームの「sf」等のアーカイブは教えて頂いたコードで希望通り表示できております。テンプレートは親ターム名毎に分かれており、「taxonomy-bookcat-(各sf名).php」です。


    >>子ターム「japan」や「usa」のアーカイブで1件しか表示されないという状態なのでしょうか?

    ↑そうです。
    現在は前に教えて頂いたコードをそのまま使用しております。

    <?php if ( have_posts() ) : ?>
    <ul>
    <?php while ( have_posts() ) : the_post(); ?>

    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endwhile; ?>
    </ul>

    <?php else : ?>

    <!-- ここに記事がない場合の処理 -->

    <?php endif; ?>

    以上です。
    テンプレートは「taxonomy-bookcat.php」でjapan」や「usa」それぞれのページを表示させています。

    よろしくお願いします。
  • id:rouge_2008
    「taxonomy-bookcat.php」よりも「taxonomy-bookcat-{ターム名}.php」が優先されます。
    ※以前の回答に書きましたが、ドキュメント「テンプレート階層」の「カスタム分類表示」(http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E9%9A%8E%E5%B1%A4#.E3.82.AB.E3.82.B9.E3.82.BF.E3.83.A0.E5.88.86.E9.A1.9E.E8.A1.A8.E7.A4.BA)を確認してみてください。

    親タームを「taxonomy-bookcat-sf.php」で表示させているのでしたら、その子タームである「japan」や「usa」も「taxonomy-bookcat-sf.php」で表示されているはずです。
    子ターム用のテンプレートファイルを個別に用意して、親ターム用を共通ファイルにする場合は問題ありませんが、子ターム用を共通ファイルにしたい場合は、前回の回答の返信コメント(http://q.hatena.ne.jp/1382440478#ac84762)の方法を試してみてください。(※「get_template_part()」でテンプレートファイルを読み込む方法です。)
  • id:kamefactory
    ご回答ありがとうございます。

    「taxonomy-bookcat.php」を共通ファイルにする為に(http://q.hatena.ne.jp/1382440478#ac84762)の方法を行いました。
    親タームの「sf」等のアーカイブは希望通り子タームごとにまとめた記事一覧が表示されますが、やはり子ターム「japan」や「usa」のアーカイブで1件しか表示されないという状態です。

    「tax-child.php」のコードが間違っているのでしょうか?現状は以下の通りです。

    <ul>
      <?php while ( have_posts() ) : the_post(); ?>

      <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
      <?php endwhile; ?>
    </ul>

    以上です。

    よろしくお願いします。
  • id:rouge_2008
    「japan」タームの記事は間違いなく2件以上あるのですね?
    「taxonomy.php」に次の記述をして各タームのアーカイブにアクセスした場合、それぞれのタームに投稿済みの記事が件数分正しく表示されますか?

    <?php if ( have_posts() ): ?>
    <ul>
      <?php while ( have_posts() ) : the_post(); ?>

      <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
      <?php endwhile; ?>
    </ul>
    <?php endif; ?>

    ※作成済みの「taxonomy-****.php」のテンプレートファイルをすべて名前変更して、これらのテンプレートが適用されないような状態にして確認してみてください。
  • id:kamefactory
    ご回答ありがとうございます。

    投稿済の件数分が正しく表示されませんでした。
    「functions.php」の記述がおかしいのでしょうか?
    以下「functions.php」の記述です。

    <?php

    add_action( 'init', 'create_post_type' );
    function create_post_type() {
    register_post_type( 'book', /* post-type */
    array(
    'labels' => array(
    'name' => __( '~' ),
    'singular_name' => __( '~' ),
    'rewrite' => array('slug' => 'book')
    ),
    'public' => true,
    'menu_position' =>5,
    'has_archive' => true
    )
    );

    /* カスタムタクソノミー */
    register_taxonomy(
    'bookcat',
    'book', /* 投稿で設定する */
    array(
    'hierarchical' => true,
    'update_count_callback' => '_update_post_term_count',
    'label' => '~のカテゴリー',
    'singular_label' => '~のカテゴリー',
    'public' => true,
    'show_ui' => true,
    'rewrite' => array('slug' => 'book')
    )
    );
    }
    ?>


    以上です。

    管理画面の「~のカテゴリー」作成ページで子ターム「japan」等を作成し、「sf」等を親として指定しており、記事投稿時に子ターム「japan」等をチェックボックスで指定して投稿しております。
    管理画面のカテゴリーページには子ターム「japan」に投稿分の数字が表示されています。

    お手数おかけして申し訳ございません。
    何卒よろしくお願いいたします。
  • id:kamefactory
    追加です。
    カスタム投稿タイプのパーマリンクの設定にて以下のように指定しております。
    http://~.com/book//%bookcat%/%postname%.html

    親ターム表示URL
    http://~.com/book/sf/
    ※希望通りに表示されます。

    子ターム一覧表示RUL
    http://~.com/book/sf/japan/
    一記事のみの表示。


    以上です。

    よろしくお願いします。
  • id:rouge_2008
    上でコメントしたシンプルなコードでも投稿済の件数分が正しく表示されなかったのでしたら、タクソノミーアーカイブ用の各テンプレートには問題がないようですが、どこに問題があるのかは現状では分かりません。


    > カスタム投稿タイプのパーマリンクの設定にて以下のように指定しております。
    > http://~.com/book//%bookcat%/%postname%.html

    WordPressデフォルトの機能ではカスタム投稿タイプのパーマリンクの設定はありませんが、何かのプラグインを利用しているのでしょうか?
    ※タクソノミーアーカイブのURLは、親・子関係なく「WordPressのURL/タクソノミー名(リライトスラッグ)/タームスラッグ」です。
    「http://~.com/book/sf/japan/」ではなく、「http://~.com/book/japan/」にアクセスして確認してみてください。

    ※「http://~.com/book/sf/japan/」にアクセスした場合、テーマによって異なりますが「ページが見つかりませんでした」等のメッセージが表示されます。(オリジナルテーマで何も用意していない場合は、何も表示されない可能性もあります。)
    記事が1つだけ表示されるという事ですが、記事本文は表示されておらず、一覧表示用のコードで1件だけ記事タイトル(※個別投稿ページへのリンク有り)が表示されるのでしょうか?
    アドレス欄のURLがアクセスした時のままで変化がないのかどうかも確認して知らせてください。
  • id:rouge_2008
    追加確認です。
    管理画面の「設定」→「表示設定」で「1ページに表示する最大投稿数」は何件に設定していますか?
    ※この設定が1件だけになっている場合は多めに設定してみてください。(インデックス(※トップページの記事一覧)や年月別、カテゴリーアーカイブ用として1件に設定しておく必要がある場合は、タクソノミーアーカイブでもページナビゲーションを表示するか、あるいはタクソノミーアーカイブの記事取得・表示件数を変更する必要があります。)
  • id:kamefactory
    ご回答ありがとうございます!

    表示設定の最大表示数1件を増やしてみたら投稿分が表示されました!!
    ただ、通常の「投稿」記事とカスタム投稿では1ページの取得記事数を変えたいと思っています。タクソノミーアーカイブの記事取得・表示件数を変更するのはどのようにすればいいのでしょうか?

    でも、表示できてよかったです。
    本当にありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません