web-dev-qa-db-fra.com

<! - nextpage -> comme un shortcode dans la boucle?

Quelqu'un a mis cela en œuvre avec succès Je veux inclure le <!--nextpage--> dans une boucle de publication unique en tant que shortcode. J'ai essayé de faire écho à cela, le tag apparaît mais la publication n'est pas divisée en pages.

Je dois pouvoir faire écho à do_shortcode('[nextpage]'); dans le single.php et le diviser en plusieurs pages ...

1
David Reis

Utilisation du filtre the_posts:

Voici une idée utilisant le filtre the_posts, qui se déclenche avant que setup_postdata() ne soit activé:

/**
 * 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;
});

La raison pour laquelle votre approche ne fonctionne pas, c'est que votre shortcode [nextpage] est généré après que la fonction setup_postdata(), qui gère la pagination de la publication, a vérifié la présence de <!--nextpage--> dans le contenu de la publication.

Exemple:

Ici, je le teste avec quelques WordPress Lorem Ipsum :

back-end

avec la sortie suivante au début du thème par défaut TwentyFifteen :

front-end

2
birgire