はじめに
WordPressで予約投稿をプレビューすると、<!--nextpage--> で分割した記事の2ページ目以降が表示されない場合があります。
この記事では、予約投稿のプレビューで2ページ目以降が表示されない現象と、その原因、対処方法について紹介します。
現象
WordPressでは、記事本文に <!--nextpage--> を記述すると、記事を複数のページに分割できます。
しかし、予約投稿のプレビューでは、2ページ目以降のページ送りリンクが正しく生成されない場合があります。
例えば、投稿IDが「1234」の場合、1ページ目のURLは次のようになります。
/?p=1234&preview=true
一方、2ページ目のURLは次のようになります。
/?p=1234%2F2%2F&preview=true
本来は、次のようなURLになる必要があります。
/?p=1234&page=2&preview=true
このように、ページ番号が正しく付加されないため、2ページ目以降をプレビューできません。
原因
この問題はWordPress本体側のページ送りURL生成に関係する不具合です。
WordPressの公式サポートフォーラムでも、同様の症状が報告されています。
テーマ固有の問題ではないため、Cocoon以外のテーマでも発生する可能性があります。
対策
以下のコードをfunctions.phpに追加します。
add_filter('preview_post_link', function($link, $post) {
if ($post->post_status == 'future') {
$link = preg_replace(
'~([0-9]+)%2F([0-9]+)%2F&~',
'$1&page=$2&',
$link
);
}
return $link;
}, 10, 2);
解説
予約投稿のプレビューURLを生成する際に使用される preview_post_link フィルターを利用して、URLを修正します。
例えば、%2F2%2F は、2ページ目を示す /2/ がURLエンコードされたものです。
本来は &page=2 として指定されるべきページ番号が、投稿IDの後ろに付加されています。
さいごに
今回紹介した方法を使えば、予約投稿のプレビューでも分割ページの2ページ目以降を表示できるようになります。
予約投稿で記事を分割している場合は、ぜひ試してみてください。

