Web事業部実績紹介
Web事業部実績紹介
2015.05.18

WordPressで「preview」すると「not found」になるときの対処法

ひろゆき

こんにちは。ひろゆきです。

初夏の陽気の季節ですね。

今回はWordPressのカスタマイズでハマったときの備忘録です。しょうもないことで今回もはまってしまいました。

PreviewしようとするとNot foundになっちゃう

投稿タイプの記事編集画面で、下書きのプレビューだけ表示できないという現象に遭遇しました。

ステータスが“公開済み”の場合

koukai

公開状態で「プレビュー」をクリックすると・・・

 
preview

プレビューできました!

ステータスが“下書き”の場合

sitagaki

下書き状態で「プレビュー」をクリックすると・・・

 
404

プレビューできない!

原因

似たようなバグで、追加した投稿タイプの一覧、詳細ページが表示されないというものがあります。この場合であれば、大抵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じゃない場合には表示されない状態になっていたのが原因でした。

  • 1
  • 2