サポート » 使い方全般 » 本文中の特定タグの置換につきまして

  • 解決済 torasan

    (@torasan)


    お世話になります。

    WordPressで記事本文が以下の様に構成されていたとします。

    <h3 class=”abc”>小見出し1</h3>
    文章1
    <h3 class=”abc”>小見出し2</h3>
    文章2
    <h3 class=”abc”>小見出し3</h3>
    文章3

    この場合、一番上の<h3 class=”abc”>小見出し1</h3>の部分だけを
    <h2 class=”abc”>小見出し1</h2>に置換する(h3タグをh2タグに変更する)事は可能でしょうか?

    Search Regexで何とかなるかと思いましたが、正規表現では無理なのですかね…。
    どなたかお分かりになる方がおられましたら良い方法をご教示下さい。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • こんにちは、

    フィルターで例えると、

    
    add_filter('the_content','change_first_match');
    
    function change_first_match( $content ){	
    	return preg_replace('!<h3 class="abc">小見出し1</h3>!','<h2 class="abc">小見出し1</h2>', $content, 1 );
    }
    
    トピック投稿者 torasan

    (@torasan)

    nobita様

    返信ありがとうございます。

    先のコードはfunctions.phpに記述するものなのでしょうか?
    一応、書いて保存まで出来たのですが、h3タグがh2タグに変化することはなかったです…。
    記事タイトルが<h2 class=”post-title”>(記事タイトル)</h2>
    になっているせいで、タグの順番が合わないのでしょうか?

    $content, 1 の「1」は何番目にそのタグが出てくるかを表していると思ったのですが…。

    先のコードはfunctions.phpに記述するものなのでしょうか?

    すみませんが、手とり足とりというわけにもいかないので、、、

    簡単に説明だけしますので、ググったりして調べてみてくださーい。

    コードは「フィルター」と呼ばれるもので、投稿自体を書き換えるわけではなく、「ブログを表示した時に、表示が変更になるというものです」

    フィルターの種類によっては、保存時に書き換えるといった作業も可能です。

    コードが、ちゃんと変換するかどうか試したテスト投稿をペーストしておきます。

    
    <h3 class="abc">小見出し1</h3>
    <p class="">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    
    <h3 class="abc">小見出し1</h3>
    <p class="">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    
    <h3 class="abc">小見出し1</h3>
    <p class="">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    

    PHP: preg_replace – Manualを読むと、関数が何を行っているのかわかると思います。

    もっといい方法があるのかもしれないので、気が向いたら試してみてください。

    キャプチャーはこちら

    http://www.tenman.info/wp3/manualraindrops/files/capture.png

    • この返信は6年、 3ヶ月前にnobitaが編集しました。
    • この返信は5年、 10ヶ月前にNaoko Takanoが編集しました。

    この投稿は自動システムによって承認待ちとなっています。72時間以内に審査されます。

    となったので、返信内容が公開されるのをしばらく待ってください

    トピック投稿者 torasan

    (@torasan)

    nobita様

    出来ました。
    functions.phpに以下の記述で変換されました。

    function change_first_match( $content ){
    return preg_replace(‘!<h3 class=”abc”>小見出し1</h3>!’,'<h2 class=”abc”>小見出し1</h2>’, $content, 1 );
    }
    add_filter(‘the_content’,’change_first_match’);

    よくよく考えたらadd_filterを後ろに書けば良かったのですね。

    それから承認待ちとなったと思われるメールが届いています。

    >フィルターの種類によっては、保存時に書き換えるといった作業も可能です。
    今回のは見かけを変更するだけでデータベースの記事内容は変わっていないわけですよね。
    保存時に書き換えるということも出来るのですね、驚きました。
    PHP: preg_replace – Manual
    というのはphp.net/manual/ja/function.preg-replace.phpのページでよろしいのでしょうか?
    自分にはキツそうですが読んでみます。

    トピック投稿者 torasan

    (@torasan)

    トピックを閉じるのを忘れておりました。
    解決済みです。ありがとうございました。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「本文中の特定タグの置換につきまして」には新たに返信することはできません。