如何禁用内容分页?

时间:2015-11-16 作者:ninja08

我想从WordPress中完全禁用此功能,因为我正在用Javascript实现我自己的版本。

当我试图通过get_the_content()the_content() 它只给我第一页,因为内容有分页符。当我使用$post->the_content 我得到了完整的帖子,但没有用HTML标签格式化。我不想自己通过编程来添加这些内容。

因此,我要么需要将所有内容都格式化,要么就暂时不知道如何进行格式化wp_page_links() 所以它不会为我的帖子分页。

3 个回复
最合适的回答,由SO网友:Milo 整理而成

EDIT - 现在4.4已经发布,您应该使用content_pagination 滤器请参见下面birgire的答案。


您可以通过以下方式向原始帖子内容添加格式applying 这个content filters 直接发送至$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\' );

SO网友:birgire

WordPress 4.4中的新内容分页过滤器自WordPress 4.4起,我们可以使用content_pagination 过滤器(参见票据#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 );
此筛选器位于setup_postdata() 的方法WP_Query 类并将使修改分页页更容易。

下面是几个如何删除内容分页的示例(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;
} );
如果我们只想针对post 主回路中的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 );

SO网友:s_ha_dum

您可以通过剥离nextpage 帖子内容外的标记:

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);