it-swarm.com.de

Wie deaktiviere ich die Paginierung von Inhalten?

Ich möchte diese Funktionalität in WordPress vollständig deaktivieren, da ich meine eigene Version mit Javascript implementiere.

Wenn ich versuche, den gesamten Inhalt eines Posts über die get_the_content() oder die the_content() abzurufen, erhalte ich nur die erste Seite, da der Inhalt Seitenumbrüche aufweist. Wenn ich $post->the_content verwende, erhalte ich den vollständigen Beitrag, der jedoch nicht mit HTML-Tags formatiert ist. Ich möchte diese nicht selbst programmatisch hinzufügen müssen.

Entweder muss ich den gesamten Inhalt bereits formatieren - die Art und Weise, wie dies geschieht, ist mir derzeit unbekannt, oder ich deaktiviere wp_page_links(), damit meine Beiträge nicht paginiert werden.

4
ninja08

EDIT - Nachdem 4.4 veröffentlicht wurde, sollten Sie den content_pagination-Filter verwenden. Siehe Birgires Antwort unten.


Sie können den Inhalt der unformatierten Posts formatieren, indem Sie anwenden den Inhaltsfilter direkt an $post->post_content senden:

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

Dies umgeht die Paginierung, indem die Funktion get_the_content nicht verwendet wird. Diese Funktion verwendet the_content intern, um den Inhalt der aktuellen Seite für mehrseitige Posts abzurufen.

Sie können verhindern, dass wp_link_pages irgendetwas ausgibt, indem Sie einen Filter auf seine Ausgabe anwenden, bevor die Funktion aufgerufen wird, und die Hilfsfunktion __return_empty_string verwenden:

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

Neuer Content Pagination Filter in WordPress 4.4

Ab WordPress 4.4 können wir den content_pagination Filter verwenden (siehe 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 );

Dieser Filter entspricht der setup_postdata()-Methode der WP_Query-Klasse und erleichtert das Ändern der Seitenumbrüche.

Hier einige Beispiele zum Entfernen der Inhaltspagination (PHP 5.4+):

Beispiel 1

So können wir die Paginierung von Inhalten deaktivieren:

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

Beispiel # 2

Wenn wir nur die Hauptabfrageschleife anvisieren wollen :

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

Beispiel # 3

Wenn wir nur post Beitragstypen in der Hauptschleife anvisieren wollen:

/**
 * 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

Sie können die "Link-Seiten" -Funktionalität in einem Filter deaktivieren, indem Sie die nextpage -Markierungen aus dem Inhalt des Posts entfernen:

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