operamaniac
  • 0
Новичок

Автоматически создавать страницы в сообщении на основе количества слов

  • 0

Мне нужен метод для автоматического создания страниц (используя <!--nextpage--> ) в сообщениях на основе количества слов.

Например… Сообщение, содержащее 1200 слов, должно быть разбито на 6 страниц с разрывом страницы после каждых 200 слов.

Я понимаю, что могу сделать это вручную. Но эта функциональность необходима для сайта на базе WordPress, который будет содержать архивы импортированных данных на нескольких языках.

Пытался найти плагин, который бы делал что-то подобное. Не удалось найти.

Share
  1. Это сложно сделать программно из-за возможных вариаций в html и баланса тегов. Однако, если вы попытаетесь, вот как я предлагаю это сделать.

    Во-первых, WordPress настраивает пагинацию записей в setup_postdata(), которая вызывается в конце the_post() . Это означает, что вам нужно получить эти <!--nextpage--> строки в сообщениях до конца the_post() . Действие 'loop_start' должно работать для этих целей. Он даже передает копию текущего объекта WP_Query по ссылке, поэтому вы можете вносить изменения непосредственно в запрошенные сообщения!

    Что-то вроде этого для начала:

    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-тегов и может даже поместить разрыв страницы внутри одного.

    • 0
  2. Спасибо, что сэкономили мое время. При переносе сайта, отличного от 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');
    
    • 0
  3. В этом вам может помочь модуль «автоматической разбивки на страницы» Studio Hyperset Page-Links Plus.

    Это позволяет пользователям WordPress обменять утомительные встроенные теги на инструмент управления всем сайтом, который быстро и единообразно разбивает сообщения и страницы на страницы.

    Модуль автоматически предотвращает вдовы, сироты, конечные заголовки и избегает разделения предложений и отдельных слов, а также может быть настроен на переопределение или игнорирование существующих встроенных тегов.

    Проверьте это здесь: http://pagelinksplus.com/wordpress-pagination-modules/wordpress-pagination-auto-pagination

    • 0

Оставить ответ

You must login to add an answer.