web-dev-qa-db-ja.com

<! - nextpage - >ループ内のショートコードとして?

誰もがこれをうまく実装できましたか? 1つのポストループ内に<!--nextpage-->をショートコードとして含めたいです。私はそれをエコーし​​ようとしました、タグは現われます、しかし、ポストはページに分けられません。

single.php内でdo_shortcode('[nextpage]');をエコーし​​、実際にはそれを異なるページに分割する必要があります。

1
David Reis

the_postsフィルタを使う:

これは、setup_postdata()がアクティブになる前に起動するthe_postsフィルターを使用した1つのアイデアです。

/**
 * Replace [nextpage] with <!--nextpage--> through the 'the_posts' filter.
 *
 * @see http://wordpress.stackexchange.com/a/183980/26350
 */

! is_admin() && add_filter( 'the_posts', function( $posts )
{
    $posts = array_map( function( $p )
    {
        if ( false !== strpos( $p->post_content, '[nextpage]' ) )
            $p->post_content = str_replace( '[nextpage]', '<!--nextpage-->', $p->post_content ); 
        return $p;
    }, $posts );
    return $posts;
});

あなたのアプローチがうまくいかない理由は、あなたの[nextpage]ショートコードは投稿のページ付けを扱うsetup_postdata()の後に生成され、投稿内容の中で<!--nextpage-->をチェックしたからです。

例:

ここで私はいくつかの WordPress Lorem Ipsum でそれをテストします。

back-end

TwentyFifteenデフォルトテーマのフロントエンドに次の出力があります。

front-end

2
birgire