web-dev-qa-db-ja.com

コンテンツのページ区画切り替えを無効にする方法

私はJavascriptでこれの私自身のバージョンを実装しているので、私はWordPressからこの機能を完全に無効にしたいです。

get_the_content()またはthe_content()を使って投稿内のすべてのコンテンツを取得しようとすると、最初のページしか表示されません。コンテンツに改ページがあるためです。 $post->the_contentを使用すると、完全な投稿が表示されますが、HTMLタグでフォーマットされていません。プログラム的に自分自身を追加する必要はありません。

ですから、私はすべてのコンテンツをフォーマット済みにする必要があります - これを行う方法は現時点では私にはわからないか、wp_page_links()を無効にして私の投稿にページを付けないようにします。

4
ninja08

EDIT - 4.4が出ましたので、content_paginationフィルタを使うべきです。下記のbirgireの答えを見てください。


生の投稿コンテンツにフォーマットを追加するには、 適用 the コンテンツフィルタ$post->post_contentに直接追加します。

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

これはget_the_content関数を使用しないことによってページネーションを回避します。これはthe_contentがマルチページ投稿のために現在のページのコンテンツを取得するために内部的に使用するものです。

関数が呼び出される前にフィルタを出力に適用し、 wp_link_pages ヘルパー関数を使用することで、__return_empty_stringが何も出力しないようにすることができます。

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

WordPress 4.4の新しいコンテンツページネーションフィルタ

WordPress 4.4ではcontent_paginationフィルタを使うことができます(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 );

このフィルタはWP_Queryクラスのsetup_postdata()メソッドにあり、ページネーションページを修正するのをより簡単にします。

コンテンツのページ区切りを削除する方法の例をいくつか示します(PHP 5.4以降)。

例1

コンテンツのページ区切りを無効にする方法は次のとおりです。

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

例2

メインクエリループのみをターゲットにしたい場合は、

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

例3

メインループでpost投稿タイプのみをターゲットにしたい場合は、次のようにします。

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

投稿コンテンツからnextpageマーカーを削除することで、1つのフィルタで「リンクページ」機能を無効にすることができます。

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