web-dev-qa-db-fra.com

Insérer des sauts de page par programme

Est-il possible d’ajouter un saut de page dans WordPress par programmation?

J'essaie de le faire dans une boucle PHP qui est insérée dans un message en tant que widget. Elle génère des informations provenant de Yelp via l'API de Yelp, mais je souhaite que la boucle crée un saut de page <!--nextpage--> à chaque fois. itère dans la boucle. J'ai tout fait sauf la partie où j'inclue le saut de page car cela ne fonctionne évidemment pas en insérant simplement cette balise <!--nextpage--> puisque celle-ci est exécutée auparavant.

Ma question est la suivante: existe-t-il un autre moyen de le faire? Peut-être un crochet ou un filtre ou peut-être un équivalent PHP? Je ne suis pas sûr de savoir comment clarifier autrement la question, car je ne savais pas trop comment poser la question autrement qu'en précisant ce dont j'avais besoin.

Mise à jour: j'ai également essayé d'utiliser un plugin qui me permet de l'utiliser comme un shortcode. J'ai ensuite essayé d'utiliser do_shortcode dans PHP et cela sortait la balise mais était pris en commentaire.

1
Lloan Alas

Remplacement de la rupture de page par défaut - avec des parties de contenu externes

La rupture de page a lieu dans la méthode WP_Query::setup_postdata(), lorsque nous appelons the_post() dans la boucle.

Les parties de page sont stockées dans le tableau global $pages et récupérées avec la fonction get_the_content().

Cela se produit avant que le filtre the_content ne soit appliqué au contenu.

Nous pouvons modifier cette rupture de page par défaut, avec notre propre wrapper get_the_content().

Supposons que nous avons ceci dans notre modèle de thème:

// Display
the_content();

// Paging
wp_link_pages();

Vous trouverez ci-dessous deux façons de modifier la rupture de page, en utilisant des parties de contenu externes .

1) Modification d'un thème enfant

Nous remplaçons ceci, dans le thème enfant correspondant, par:

// Setup our content parts
$parts = [ get_the_content(), 'Part Two', 'Part Three', 'Part Four' ];

// Display
if( function_exists( 'get_the_content_part_wpse194155' ) )
    echo apply_filters( 'the_content', get_the_content_part_wpse194155( $parts ) );
else
    the_content();

// Paging
wp_link_pages();

2) Modification avec un filtre

Nous pourrions également utiliser le filtre the_content. Exemple:

! is_admin() && add_filter( 'the_content', function( $content )
{
    if( ! in_the_loop() || ! function_exists( 'get_the_content_part_wpse194155' ) )
        return $content;

   // Setup our content parts
    $parts = [ $content, 'Part Two', 'Part Three', 'Part Four' ];

    // Display
    return get_the_content_part_wpse194155( $parts );

} );

Notez que nous utilisons ici uniquement des parties de contenu statique à des fins de démonstration. En général, vous voudriez avoir différentes parties de contenu pour chaque article.

Fonction d'assistance

Notre wrapper personnalisé est défini comme:

/**
 * Modify globals to support page breaks between given content parts
 *
 * @param  array  $parts Array of content parts 
 * @return string|null   A single content part
 */

function get_the_content_part_wpse194155( array $parts )
{
    global $page, $pages, $multipage, $numpages;

    // No paging needed
    if( count( $parts ) <= 1 )
        return array_pop( $parts );

    // Init
    $out   = '';
    $break = '<!--nextpage-->';
    $page  = (int) get_query_var( 'page' );

    // Loop - add page breaks between parts
    foreach( (array) $parts as $part )
        $out .= $part . $break;

    // Remove the last empty page break
    if( count( $parts ) > 0 )
        $out = mb_substr( $out, 0, -1 * strlen( $break ) );

    // Adjust the globals
    $pages     = explode( $break, $out );
    $page      = ( $page > count( $pages ) || $page < 1 ) ? 1 : $page;
    $numpages  = count( $pages );
    $multipage = 1;    

    return $pages[$page-1];
}
1
birgire