カスタム投稿タイプのアーカイブページでページングに不具合が出る場合

カスタム投稿タイプのアーカイブページでの記事数を、管理画面で設定している投稿数から query_posts を使用して操作した場合にページングが正常にできなくなって困りました。そんな時の対処法です。

2013/04/06記事内容変更

最初に書いていた方法だと、その他の get_posts や guery_posts へ影響がでてしまう可能性がある為記事内容変更しました。

そもそも、このエラーが出ていたのは query_posts でメインクエリで表示件数を操作していた為でした…。メインクエリを query_posts で操作するのは現在よくない方法のようです。

is_main_query と pre_get_posts を使った書き方に書き直しました。

is_main_query と pre_get_posts を使って表示件数を変更する

is_main_query()でメインクエリを表示させる場合という条件付きにし、アクションフック pre_get_posts を使って表示件数を変更します。

// 「custom」という投稿タイプのアーカイブページで表示件数を変える
function custom_posts( $wp_query ) {
    if ( ! is_admin() && $wp_query->is_main_query() && is_post_type_archive('custom')) {
    // 管理画面以外のメインクエリと、カスタムポスト名が 'custom' だった場合に
        $wp_query->set( 'posts_per_page', 5 );
    // 表示件数を5件にする
    }
}
add_action( 'pre_get_posts', 'custom_posts' );

カスタム投稿タイプのアーカイブページとタクソノミーアーカイブページのみ表示件数を5件に変更するには以下のように functions.php へ記入します。(投稿タイプ名:custom タクソノミー名:custom_cat だった場合)

function custom_posts( $wp_query ) {
    if ( ! is_admin() && $wp_query->is_main_query() && is_post_type_archive('custom') ||  is_tax('custom_cat')) {
        $wp_query->set( 'posts_per_page', 5 );
    }
}
add_action( 'pre_get_posts', 'custom_posts' );

Related Article

No Comments & Tracbacks

Leave a Comment

Emailは公開されません。*は必須項目です。


*


Categorys

Tags

CSS3 ダッシュボード ヘッダー トラブル コードサンプル コンテンツ スライドショー jQueryプラグイン php 引っ越し 素材 お知らせ JavaScript Facebook CSS カテゴリー 投稿タイプ IE HTML5 Shareボタン seo レスポンシブ Photoshop タクソノミー ナビゲーション カスタムメニュー Git Macアプリ サイドバー WPセキュリティ SVG iTunes PHPリファレンス API WP使い方 query_posts データベース get_posts() 条件分岐 コメント function RSS スマートフォン Sass/Compass さくらVPS