カスタム投稿タイプ
book
カスタムタクソノミー
bookcat
親カテゴリースラッグ
sf
子カテゴリースラッグ
japan
usa
「http://WordPressのURL/bookcat/sf/japan/」にjapanカテゴリーだけの記事一覧も表示させたいのです。
テンプレートはtexonomy-bookcat.phpで表示したいと思っています。
http://q.hatena.ne.jp/1382440478で回答をいただきましたが、新規投稿すると上書きされ、最新の一投稿しか表示されない状態です。
よろしくお願いいたします。
取得する投稿件数の変更は次のパラメータで可能です。
「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' );
現状ではどのコードを利用していますか?
子タームの記事一覧を表示するコードが「<?php while ( have_posts() ) : the_post(); ?>」と「<?php endwhile; ?>」の間に記述されているか確認してみてください。
↑そうです。
親タームの「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」それぞれのページを表示させています。
よろしくお願いします。
※以前の回答に書きましたが、ドキュメント「テンプレート階層」の「カスタム分類表示」(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()」でテンプレートファイルを読み込む方法です。)
「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>
以上です。
よろしくお願いします。
「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」のテンプレートファイルをすべて名前変更して、これらのテンプレートが適用されないような状態にして確認してみてください。
投稿済の件数分が正しく表示されませんでした。
「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」に投稿分の数字が表示されています。
お手数おかけして申し訳ございません。
何卒よろしくお願いいたします。
カスタム投稿タイプのパーマリンクの設定にて以下のように指定しております。
http://~.com/book//%bookcat%/%postname%.html
親ターム表示URL
http://~.com/book/sf/
※希望通りに表示されます。
子ターム一覧表示RUL
http://~.com/book/sf/japan/
一記事のみの表示。
以上です。
よろしくお願いします。
> カスタム投稿タイプのパーマリンクの設定にて以下のように指定しております。
> 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がアクセスした時のままで変化がないのかどうかも確認して知らせてください。
管理画面の「設定」→「表示設定」で「1ページに表示する最大投稿数」は何件に設定していますか?
※この設定が1件だけになっている場合は多めに設定してみてください。(インデックス(※トップページの記事一覧)や年月別、カテゴリーアーカイブ用として1件に設定しておく必要がある場合は、タクソノミーアーカイブでもページナビゲーションを表示するか、あるいはタクソノミーアーカイブの記事取得・表示件数を変更する必要があります。)
表示設定の最大表示数1件を増やしてみたら投稿分が表示されました!!
ただ、通常の「投稿」記事とカスタム投稿では1ページの取得記事数を変えたいと思っています。タクソノミーアーカイブの記事取得・表示件数を変更するのはどのようにすればいいのでしょうか?
でも、表示できてよかったです。
本当にありがとうございます。