【WordPress】functions.phpを使ってカスタム投稿アーカイブの表示件数を変える方法

2015年08月13日 木曜日 01時32分

wordpress

php初心者の俺がwordpressで一番苦労したのが、カスタム投稿を作成し、archive.phpとtaxonomy.phpで記事の表示件数を変えようとquery_postsを使ったらプラグインのpagenaviが機能しなくなった事。

詳しいことは良く分からんが、query_postsを使うことによってクエリが変更され、wordpress管理画面の表示設定で設定した「1ページに表示する最大投稿数」と矛盾が発生してpagenaviが混乱しちゃうのが原因らしい。

いろいろググりまくって出した結論がfunctions.phpにアクションフックを記述し、表示条件を指定する方法でした。

[ad#ad-big]

カスタム投稿の記事一覧表示件数を変える方法

カスタム投稿のアーカイブ(記事一覧)はarchive.phpを使用しますが、カスタム投稿スラッグ【item】の場合はarchive-item.phpにすればカスタム投稿別にテンプレートを用意できます。

で、カスタム投稿ごとに表示件数を変えたい場合は、下のコードをfunctions.phpに記述。
下記の例では、カスタム投稿スラッグは【item】になっているので、そこを変更して下さい。

add_action('pre_get_posts', 'custom_pre_get_posts');
function custom_pre_get_posts($query) {
  if (!is_admin() && $query->is_main_query() && is_post_type_archive('item')) {
    $query->set('posts_per_page', '表示件数');
  }
}

あとはarchive-item.phpに通常のループ記述をするだけで完成です。
通常ループを使用しているのでpagenaviも混乱せずちゃんと機能します。

ターム別記事一覧の表示件数を変える方法

カスタム投稿の記事一覧が出来たら、次に必要になるのがターム別の記事一覧じゃないでしょうか。
簡単にいえば、カスタム投稿のカテゴリー別記事一覧になるのかな?

タクソノミーのスラッグが【item_cat】の場合、タクソノミーテンプレート名をtaxonomy-item_cat.phpにすれば、item_catと言うタクソノミーにぶら下がっている全てのターム別記事一覧を表示出来ます。

で、そのターム別記事一覧の表示件数を変えたい場合は、下のコードをfunctions.phpに記述。
下記の例では、タクソノミースラッグは【item_cat】になっているので、そこを変更して下さい。

add_action('pre_get_posts', 'custom_tax_posts');
function custom_tax_posts( $query ) {
  if (!is_admin() && $query->is_main_query() && $query->is_tax('item_cat'))
  $query->set('posts_per_page', '表示件数');
}

あとはtaxonomy-item_cat.phpに通常のループ記述をするだけで完成です。
通常ループを使用しているので、こちらのpagenaviも混乱せずちゃんと機能します。

意味なんて気にするなw

アーカイブとタクソノミーの表示件数をコントロールしてpagenaviを表示させることが出来ればカスタム投稿なんて怖くないぞ。
記述の意味なんか気にするな(笑)。
出れば良いんです、出れば。

しかし、WordPressのアクションフックとフィルターフックを使いこなしてる人はどんな勉強してんのかね?
徐々に読めるようにはなってきてるが、書けるようになる気がしないわ…。

関連記事

コメントさんきゅ

コメントはまだありません...(つд・)エーン

コメントどーぞ

© 2010 - 2024 南国スキーぶろぐ