web-dev-qa-db-ja.com

単語数に基づいて投稿内に自動的にページを作成する

単語数に基づいて投稿に自動的にページを作成する方法が必要です(<!--nextpage-->を使用)。

たとえば... 1200語の単語を含む投稿は6ページに分割され、200語ごとに改ページされます。

私はそれが手動でできることを理解しています。しかし、この機能は、インポートされたデータのアーカイブを複数の言語で含むWordPressを搭載したサイトに必要です。

このようなことを達成するだろうプラグインを探してみました。それが見つかりませんでした。

2
OperaManiac

Htmlの潜在的なバリエーションとタグのバランスの仕方から、これはプログラム的に行うのは難しいです。しかし、あなたが試してみるとしたら、ここに私がそれをすることを提案する方法があります。

まず第一に、WordPressはポストページネーションをsetup_postdata()に設定します。これはthe_post()の最後に呼び出されます。それはthe_post()の終わりの前にポストのそれらの<!--nextpage-->行を得る必要があることを意味します。 '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タグ内のスペースもカウントし、改ページを挿入することさえ可能なので、一時的にhtmlタグを削除してnextpageフラグを挿入した後にそれらを置き換える方法を見つけることをお勧めします。

5
John P Bloch

私の時間を節約してくれてありがとう。 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