4つ目のh2タグの後にを自動挿入する方法
-
「4つ目の後」というのは、「5つ目の直前」と解釈して…
function paging_filter($data, $postarr) { if (stripos($data['post_content'], '<!--nextpage-->') !== false) return $data; $nth = 4; $pattern = '/(<h2[^>]*>.+<\/h2>)/i'; $splitted = preg_split($pattern, $data['post_content'], -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); $len = count($splitted); if ($len < ($nth * 2)) return $data; for ($i = $j = 0; $i < $len; $i++) { if (preg_match($pattern, $splitted[$i])) { $j++; if ($j % 4 == 0) { $splitted[$i] = "\n<!--nextpage-->\n" . $splitted[$i]; } } } $data['post_content'] = implode('', $splitted); return $data; } add_filter('wp_insert_post_data', 'paging_filter', 10, 2);
本文に
<!--nextpage-->
(スペースなし) が含まれている場合には何もしません。また、本文に、<pre><h2>....</h2></pre>
みたいな部分があると、判定を間違います。特定のタグの中にある<h2>
を回避する判定をつけた方がより安全性が増しますが、面倒なので入れてません。etc… コードを読んでください。kjmtsh様
ご回答いただきありがとうございます。
いただいたコードで反映されるサイトと、されないサイトがございました。具体的には、Podsプラグインを用いて、そこでh2タグを指定しているサイトでは使えませんでした。
回避方法をご存知でしたら、ご教授いただきたく存じます。確実に Pods が原因だということがわかっているなら、Pods のフォーラムで開発者に直接質問するのがいいと思います。上のコードに加えて、プラグインの設定やなにやらを書き、「これを動かすにはどうしたらいい?」って聞けば、何を言っているかはすぐにわかってくれるはずですし、最も有効なアドバイスが得られるはずです。
Pods がデータベースに書き込むときに、どんなことをしているのかがわかれば、修正方法が提示できるかもしません。使ってないのでよくはわかりませんが、以前、バグリポートをもらて、ちょっと調べたときに、自前のテーブルを作っていたような覚えがあるので、何かやっていることは確かなんでしょう、たぶん。調べられますか?
ご返信いただきありがとうございます。
自分ではそこまで調べられませんので、Podsのフォーラムに質問してみます。ありがとうございました。
実際にやってはいませんが、Advanced Custom Fieldsのプラグイン「The Repeater Field」で結構簡単にできそうですよ。
何個かセットにループ組めるので、ループの最後に<!–nextpage–>をつければいけそうな感じがするのですが。
ちなみに、Personal Licenseも値段が一緒なのでプロ版の方がお得かかもです。http://www.advancedcustomfields.com/pro/
ご参考までに
tane2015さん
やってみました。
「The Repeater Field」の機能で繰り返しフィールドを使い以下のループを組みました。<?php if ( get_field('サブフィールドを持っているフィールド名') ): ?> <?php while( has_sub_field('サブフィールドを持っているフィールド名') ): ?> <div> <h3><?php esc_html( the_sub_field('sub_title1') ); ?></h3> <div> <?php esc_html( the_sub_field('content1') ); ?> </div> <h3><?php esc_html( the_sub_field('sub_title2') ); ?></h3> <div> <?php esc_html( the_sub_field('content2') ); ?> </div> <h3><?php esc_html( the_sub_field('sub_title3') ); ?></h3> <div> <?php esc_html( the_sub_field('content3') ); ?> </div> <h3><?php esc_html( the_sub_field('sub_title4') ); ?></h3> <div> <?php esc_html( the_sub_field('content4') ); ?> </div> </div> <!--nextpage--> <?php endwhile; ?><?php endif; ?>
これで大丈夫だと思います。
ただ、これだと標準のコンテンツエディターが邪魔になるので「Advanced Custom Fields」の機能で非表示設定を行い、ソースから以下のソースを消すと良いかもです。
<?php custom_wp_link_pages(); ?>
後は抜粋に要約文を入れればそれなりに生成できると思います。投稿画面の中に「追加」ボタンができてますので追加させれば、自動でページが追加されると思うのですが、このやり方ですと最後に無駄な<!–nextpage–>ができてしますので少し工夫が必要です。
こんな感じでいかがでしょうか。
- トピック「4つ目のh2タグの後にを自動挿入する方法」には新たに返信することはできません。