根据字数自动创建帖子中的页面

时间:2011-04-13 作者:OperaManiac

我需要一种方法来自动创建页面(使用<!--nextpage-->) 在帖子中根据字数。

例如一篇包含1200个单词的帖子应该分成6页,每200个单词后面就有一个分页符。

我知道我可以手动操作。但WordPress支持的站点需要此功能,该站点将包含多种语言的导入数据档案。

尝试搜索一个插件来完成类似的任务。找不到它。

3 个回复
SO网友:John P Bloch

这很难通过编程实现,因为html中存在潜在的变化以及标记如何平衡。然而,如果你要尝试,我建议你这样做。

首先,WordPress在setup_postdata(), 在the_post(). 这意味着你需要得到这些<!--nextpage--> 结束前的立柱中的线条the_post(). 这个\'loop_start\' 行动应该为这些目的而起作用。它甚至通过引用传递当前WP\\u查询对象的副本,因此您可以直接对查询的帖子进行更改!

这是一个开始:

add_action( \'loop_start\', \'wpse14677_loop_start\' );

function wpse14677_loop_start( $query ) {
    foreach( $query->posts as $index => $post ) {
        $words = preg_split( \'/ +/\', $post->post_content, PREG_SPLIT_NO_EMPTY );
        $pages = array();
        while ( $words ) {
            $word_count = count ( $words );
            if ( 200 >= $word_count ) {
                $pages[] = implode( \' \', $words );
                $words = array();
            } else {
                $pages[] = implode( \' \', array_slice( $words, 0, 200 ) );
                $words = array_slice( $words, 200 );
            }
        }
        $page_count = count( $pages );
        if( 1 < $page_count ) {
            $query->posts[ $index ]->post_content = implode( "\\n<!--nextpage-->\\n", $pages );
        }
    }
}
希望这能让你知道你需要做什么。我建议找到一些临时剥离html标记的方法,并在插入nextpage 标志,因为上面的函数还将计算HTML标记中的空格,甚至可以在其中放置分页符。

SO网友:Omprakash Bagrao

谢谢你节省了我的时间。在将非wordpress站点迁移到wordpress时,我试图替换PAGEBREAK 在wordpress中,我使用了以下语法。

function make_pagebreak_nextpaglink( $query  ) {
   foreach( $query->posts as $index => $post ) {
      $content = str_replace(\'__PAGEBREAK__\', \'<!--nextpage-->\',   $post->post_content);
      $query->posts[ $index ]->post_content = $content;
   }
}
add_action(\'loop_start\', \'make_pagebreak_nextpaglink\');

SO网友:Quimby Melton

Studio Hyperset的页面链接加上“自动分页”模块可以帮助您实现这一点。

它允许WordPress用户交换繁琐的在线标签,以获得一个站点范围的管理工具,该工具可以快速、统一地为帖子和页面分页。

该模块自动防止出现孤寡、尾随标题,避免拆分句子和单个单词,并可配置为覆盖或忽略现有的内嵌标记。

请在此处查看:http://pagelinksplus.com/wordpress-pagination-modules/wordpress-pagination-auto-pagination

结束