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のアクションフックとフィルターフックを使いこなしてる人はどんな勉強してんのかね?
徐々に読めるようにはなってきてるが、書けるようになる気がしないわ…。
COMMENTS:コメ無し(つд・)エーン
CATEGORY:WORDPRESSTAGS:wordpress