web-dev-qa-db-ja.com

<! - nextpage - >とプレビュー

<!--nextpage-->というブログ記事をプレビューしようとしていますが、他のページをクリックするとホームページに戻ります。

4年前に解決したことのない古いスレッドがありました https://wordpress.org/support/topic/nextpage-doesnt-work-on-preview?replies=3

プレビューしたときのURLは次のようになります。

https://www.trajano.net/?p=1569&preview_id=1569&preview_nonce=c1ab9c2efc&post_format=standard&_thumbnail_id=-1&preview=true

結構ですが、ページをクリックするとこうなります。

https://www.trajano.net/?p=1569%2F2%2F&preview_id=1569&preview_nonce=c1ab9c2efc&preview=true

ページ番号は、デコードされた場合の?p=1569のように?p=1569/2/&preview...の後に挿入されます。

3

スケジュールされた投稿またはページをプレビューするときにコンテンツページネーションリンクが機能しないというバグがあります。

チケットを見る #32295

_wp_link_page()ヘルパー関数内に不足しているfutureステータスチェックを追加するパッチがすでに提案されています。これはコンテンツページネーションリンクを生成します。

例えば以下のようなクイックフィックスを作成します。

add_filter( 'preview_post_link', function( $link, $post )
{
    if( ! is_admin() && is_preview() && 'future' === get_post_status( $post ) )
        $link = preg_replace( '~p=(\d+)%2F(\d+)%2F~', 'p=$1&page=$2', $link );

    return $link;
}, 10, 2 );

またはwp_link_pages_linkフィルタを使用します。

add_filter( 'wp_link_pages_link', function( $link, $i )
{
    if( $i > 1 && 'future' === get_post_status( get_the_ID() ) && is_preview() )
            $link = preg_replace( '~p=(\d+)%2F(\d+)%2F~', 'p=$1&page=$2', $link );

    return $link;
}, 10, 2 );
2
birgire