WordPress

WordPress予約投稿のプレビュー時、wp_link_pagesで出力されるURLにページ番号が含まれない不具合の応急処置

More than 1 year has passed since last update.

2017/9/14現在最新のWordPress v4.8.1までの複数バージョンで症状が発生します。

症状

症状については以下フォーラムの投稿と同じものです。
https://ja.wordpress.org/support/topic/%E4%B8%8B%E6%9B%B8%E3%81%8D%E3%81%A7%E3%81%AE%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC/

<!-- nextpage -->を含めた本文を予約投稿でプレビューした際に、
ページ送りリンクのURLは、本来
http://example.com/?p=1334&page=2&preview=true
のようになるべきところ、
http://example.com/?p=1334%2F2%2F&preview=true
と出力される 場合が あります。
これにより、投稿の2ページ目以降をプレビューすることができません。

※場合があるというのは、予約投稿を設定して編集を開始した直後は正しく&page=2が出力されていても、
一度保存状態となるなど、何らかの条件によって%2F2%2Fが出力されます。
また、非公開+予約投稿の場合も正しく出力されるため、運用で回避することもできます。

応急処置

URLの形状を強引に変更します。

functions.php
/**
 * @param type $preview_link
 * @return type
 */
function custom_preview_post_link($preview_link){
    return preg_replace('/([0-9]+)%2F([0-9]+)%2F&/', '$1&page=$2&', $preview_link);
}
add_filter('preview_post_link', 'custom_preview_post_link');