web-dev-qa-db-fra.com

Obtenir du contenu à partir d'une * page * unique d'un article

Quelle fonction puis-je utiliser pour récupérer le contenu d'une seule page dans un message? Supposons que je veuille diviser mon article en 5 pages. Comment puis-je obtenir le contenu de la page 3, par exemple?

Je n'arrive pas à trouver cela dans le Codex ...

1
stackhouse

Cela devrait faire l'affaire:

/**
 * For posts paginated using <!--nextpage-->, return a particular "page" of content.
 * This function uses code from WP's setup_postdata() function.
 * @param string $content the content to search for paginated page content.
 * @param int $page_number the index of the page to return the content for.
 */
function get_nextpage_content( $content, $page_number ) {
    if ( strpos( $content, '<!--nextpage-->' ) ) {
        $content = str_replace("\n<!--nextpage-->\n", '<!--nextpage-->', $content);
        $content = str_replace("\n<!--nextpage-->", '<!--nextpage-->', $content);
        $content = str_replace("<!--nextpage-->\n", '<!--nextpage-->', $content);
        $pages = explode('<!--nextpage-->', $content);
        return ( isset ( $pages[$page_number - 1] ) ) ? $pages[$page_number - 1] : false;
    } else {
        return false;
    }
}

Usage:

// Get the second page of content with a paginated post
echo apply_filters( 'the_content', get_nextpage_content( $post->post_content, 2 ) );
2
Dave Romsey

Vous devez d’abord exploser le contenu, puis exécuter quelques fonctions sur le contenu pour activer le formatage "paragraphe automatique" et les codes courts de WordPress.

$post_content = $wpdb->get_var("SELECT post_content FROM $wpdb->posts WHERE ID = {$post->ID} LIMIT 0,1");
$raw_pages = explode('<!--nextpage-->', $post_content);
foreach($raw_pages as $raw_page){
    $pages[] = wpautop( do_shortcode( trim($main_content) ) );
}

Maintenant, vous pouvez faire écho à chaque page comme suit:

<?php echo $page[0]; // Page 1 ?>

Vous pouvez également implémenter cette fonctionnalité/concept un peu différemment. J'aime diviser mon article en deux pages pour donner à mon rédacteur publicitaire la possibilité de créer le contenu principal et le contenu de la barre latérale. J'assigne essentiellement la deuxième page à la barre latérale. Bien que vous puissiez utiliser le même code que ci-dessus, un nettoyeur (encore moins flexible) pourrait être de faire quelque chose comme ça ...

$post_content = $wpdb->get_var("SELECT post_content FROM $wpdb->posts WHERE ID = {$post->ID} LIMIT 0,1");
list($main_content, $sidebar_content) = explode('<!--nextpage-->', $post_content);
$main_content = wpautop( do_shortcode( trim($main_content) ) );
$sidebar_content = wpautop( do_shortcode( trim($sidebar_content ) ) );

Maintenant, je peux simplement renvoyer la variable $main_content ou $sidebar_content où je veux dans mon modèle de page.

0
mikemick