web-dev-qa-db-fra.com

Comment désactiver la pagination du contenu?

Je souhaite désactiver totalement cette fonctionnalité à partir de WordPress car j'implémente ma propre version avec Javascript.

Lorsque j'essaie de récupérer tout le contenu d'un message via les fonctions get_the_content() ou the_content(), il ne me donne que la première page, car le contenu contient les sauts de page. Lorsque j'utilise $post->the_content, je reçois le message complet, mais il n'est pas formaté avec des balises HTML. Je ne veux pas avoir à les ajouter moi-même par programmation.

Donc, je dois soit avoir tout le contenu déjà formaté - la manière de le faire m’est inconnue pour le moment, soit désactiver wp_page_links() pour que cela ne pagine pas mes messages.

4
ninja08

EDIT - Maintenant que 4.4 est sorti, vous devriez utiliser le filtre content_pagination. Voir la réponse de birgire ci-dessous.


Vous pouvez ajouter un formatage au contenu de publication brut en en appliquant les filtres de contenu directement à $post->post_content:

echo apply_filters( 'the_content', $post->post_content );

Cela contournera la pagination en n'utilisant pas la fonction get_the_content, qui est ce que the_content utilise en interne pour extraire le contenu de la page en cours pour des publications de plusieurs pages.

Vous pouvez empêcher toute sortie de wp_link_pages en appliquant un filtre à sa sortie avant l'appel de la fonction et en utilisant la fonction __return_empty_string helper:

add_filter( 'wp_link_pages', '__return_empty_string' );
5
Milo

Nouveau filtre de pagination de contenu dans WordPress 4.4

À partir de WordPress 4.4, nous pouvons utiliser le filtre content_pagination (voir ticket # 9911 )

/**
 * Filter the "pages" derived from splitting the post content.
 *
 * "Pages" are determined by splitting the post content based on the presence
 * of `<!-- nextpage -->` tags.
 *
 * @since 4.4.0
 *
 * @param array   $pages Array of "pages" derived from the post content.
 *                       of `<!-- nextpage -->` tags..
 * @param WP_Post $post  Current post object.
 */
 $pages = apply_filters( 'content_pagination', $pages, $post );

Ce filtre réside dans la méthode setup_postdata() de la classe WP_Query et facilitera la modification des pages de pagination.

Voici quelques exemples pour supprimer la pagination de contenu (PHP 5.4+):

Exemple 1

Voici comment désactiver la pagination du contenu:

/**
 * Disable content pagination
 *
 * @link http://wordpress.stackexchange.com/a/208784/26350
 */
add_filter( 'content_pagination', function( $pages )
{
    $pages = [ join( '', $pages ) ];
    return $pages;
} );

Exemple n ° 2

Si nous voulons uniquement cibler la boucle de requête principale:

/**
 * Disable content pagination in the main loop
 *
 * @link http://wordpress.stackexchange.com/a/208784/26350
 */
add_filter( 'content_pagination', function( $pages )
{
    if ( in_the_loop() )
        $pages = [ join( '', $pages ) ];

    return $pages;
} );

Exemple n ° 3

Si nous voulons seulement cibler post post, tapez dans la boucle principale:

/**
 * Disable content pagination for post post type in the main loop
 *
 * @link http://wordpress.stackexchange.com/a/208784/26350
 */
add_filter( 'content_pagination', function( $pages, $post )
{
    if ( in_the_loop() && 'post' === $post->post_type )
        $pages = [ join( '', $pages ) ];

    return $pages;
}, 10, 2 );
7
birgire

Vous pouvez supprimer la fonctionnalité "Pages de liens" dans un filtre en supprimant les marqueurs nextpage du contenu du message:

function kill_pages($posts,$qry) {
 if ($qry->is_single()) {
  $posts[0]->post_content = preg_replace( '/<!--nextpage(.*?)?-->/', '',  $posts[0]->post_content );
 }
 return $posts;
}
add_filter('the_posts','kill_pages',1,2);
2
s_ha_dum