こんにちは。ひろゆきです。
初夏の陽気の季節ですね。
今回はWordPressのカスタマイズでハマったときの備忘録です。しょうもないことで今回もはまってしまいました。
PreviewしようとするとNot foundになっちゃう
投稿タイプの記事編集画面で、下書きのプレビューだけ表示できないという現象に遭遇しました。
ステータスが“公開済み”の場合
公開状態で「プレビュー」をクリックすると・・・
プレビューできました!
ステータスが“下書き”の場合
下書き状態で「プレビュー」をクリックすると・・・
プレビューできない!
原因
似たようなバグで、追加した投稿タイプの一覧、詳細ページが表示されないというものがあります。この場合であれば、大抵rewrite ruleが原因で、パーマリンクを更新することで直ることが多いです。
しかし、今回は公開後の詳細ページは表示できるので違いました。
原因はpre get postsでした。
問題があった記述
function change_posts_per_page($query) {
//管理画面、メインクエリーじゃないときは処理しない
if ( is_admin() || ! $query->is_main_query())
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' );
hogeポストタイプのアーカイブの表示件数を調整するために書いたコードです。
HOGE POSTTYPEの処理が詳細ページ、プレビュー画面でも通ってしまい、publishじゃない場合には表示されない状態になっていたのが原因でした。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。