対策
プレビューの場合には処理が走らないように調整しましょう。
修正例
function change_posts_per_page($query) {
//管理画面、プレビュー、メインクエリーじゃないときは処理しない
if ( is_admin() || ! $query->is_main_query() || is_preview())
return;
//HOGE POSTTYPE
if(!empty($query->query_vars["post_type"]) && $query->query_vars["post_type"] == "hoge"){
$query->set( 'posts_per_page', '10' );//件数変更
$query->set( 'orderby', 'post_date' );//ソート指定
$query->set( 'order', 'DESC' );//ソート順番
$query->set( 'post_status', 'publish' );//公開状態
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
preview画面でpre_get_postsを使わない場合は上記の記述で良いですが、もし使いたい場合はもう少し細かく分岐する必要がありそうです。
逆に詳細ページでpre_get_postsを使わないという場合などは、is_singleで除外しちゃっても良いかと思います。
まとめ
WordPressはカスタマイズの幅が広いだけに、ニッチ過ぎて検索しても出てこないバグなど、思わぬ落とし穴にはまることがあります。
ただ、冷静になると案外簡単に解決できてしまうことも多いので、常に己との戦いですね。
ではまた。
【WordPressを目的に沿ってカスタマイズ】
※ 公開前の記事を共有できるWordPressプラグイン「Public Post Preview」
※ WordPressのパーマリンク設定を変更して、SEOや日本語URLの対策をしよう
※ WordPressのカスタムフィールドを利用して、過去記事の公開日時を自動で変更する方法
※ WordPressでコメントやリビジョンなどの機能を削除・停止するときに使うプラグイン5選
※ WordPressで「Blade」テンプレートエンジンを使おう!
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。