WordPressの予約投稿のプレビューで分割ページの2ページ目が表示されない原因と対処法

Cocoonカスタマイズ集
この記事は約2分で読めます。
記事内に広告が含まれています。

はじめに

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ページ目以降を表示できるようになります。
予約投稿で記事を分割している場合は、ぜひ試してみてください。

タイトルとURLをコピーしました