サポート » 使い方全般 » 4つ目のh2タグの後にを自動挿入する方法

  • 解決済 tane2015

    (@tane2015)


    4つ目のh2タグの後に<!–nextpage–>を自動挿入する方法を教えてください。

    記事ごとにnextpageタグを挿入するのが手間ですので、
    可能であれば自動挿入したく思います。

    function.phpにコード記載することで対応できないでしょうか。
    よろしくお願いいたします。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • 「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… コードを読んでください。

    トピック投稿者 tane2015

    (@tane2015)

    kjmtsh様

    ご回答いただきありがとうございます。
    いただいたコードで反映されるサイトと、されないサイトがございました。

    具体的には、Podsプラグインを用いて、そこでh2タグを指定しているサイトでは使えませんでした。
    回避方法をご存知でしたら、ご教授いただきたく存じます。

    kjmtsh

    (@kjmtsh)

    確実に Pods が原因だということがわかっているなら、Pods のフォーラムで開発者に直接質問するのがいいと思います。上のコードに加えて、プラグインの設定やなにやらを書き、「これを動かすにはどうしたらいい?」って聞けば、何を言っているかはすぐにわかってくれるはずですし、最も有効なアドバイスが得られるはずです。

    Pods がデータベースに書き込むときに、どんなことをしているのかがわかれば、修正方法が提示できるかもしません。使ってないのでよくはわかりませんが、以前、バグリポートをもらて、ちょっと調べたときに、自前のテーブルを作っていたような覚えがあるので、何かやっていることは確かなんでしょう、たぶん。調べられますか?

    トピック投稿者 tane2015

    (@tane2015)

    ご返信いただきありがとうございます。
    自分ではそこまで調べられませんので、Podsのフォーラムに質問してみます。

    ありがとうございました。

    実際にやってはいませんが、Advanced Custom Fieldsのプラグイン「The Repeater Field」で結構簡単にできそうですよ。
    何個かセットにループ組めるので、ループの最後に<!–nextpage–>をつければいけそうな感じがするのですが。
    ちなみに、Personal Licenseも値段が一緒なのでプロ版の方がお得かかもです。

    http://www.advancedcustomfields.com/pro/

    ご参考までに

    トピック投稿者 tane2015

    (@tane2015)

    ありがとうございます。
    そこまで知識がなく難しそうですが見てみます。

    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–>ができてしますので少し工夫が必要です。

    こんな感じでいかがでしょうか。

    トピック投稿者 tane2015

    (@tane2015)

    ご丁寧にありがとうございます。
    こちらでやってみようと思います。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「4つ目のh2タグの後にを自動挿入する方法」には新たに返信することはできません。