wordpressでthe_content内の置換方法

このQ&Aのポイント
  • wordpressのthe_content内で<h3>...</h3>が見つかった場合に、<h3><span>...</span></h3>に置き換える方法を考えています。
  • functions.phpのadd_filterを使用して、the_contentフィルターフックを使い、preg_replaceを使って正規表現マッチの置換を行います。
  • preg_replaceを使用する際に、正規表現パターンと置換文字列を指定することで、<h3>タグを正しく変換することができます。
回答を見る
  • ベストアンサー

wordpressでthe_content内の置換

wordpressでthe_content内に<h3>...</h3>があったら、<h3><span>...</span></h3>に置き換える方法を考えています。 functions.php内に ---------- function add_h3_replace( $content ) { $content = get_the_content(); $content = preg_replace('<<h3>>','<h3><span>',$content); $content = preg_replace('<</h3>>','</span><h3>',$content); return $content; } add_filter( 'the_content', 'add_h3_replace', 99 ); ---------- で一応出来たのですが、正規表現のマッチの仕方が分かりません 置き換える方法をご教示していただけたらと思います。 よろしくお願い致します。

  • PHP
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ざっくりこんな感じ? <?PHP $html=<<<EOF <html> <head> <title>test</title> </head> <body> <h3>test1</h3> <p>test2</p> <h3>test3</h3> <p>test4</p> <h3 id="xxx" class="yyy zzz">test5</h3> <p>test6</p> </body> </html> EOF; print "余計なデータがない<br>\n"; $pattern="/(?<=<h3>).*?(?=<\\/h3>)/mis"; $replacement="<span>$0</span>"; $result=preg_replace($pattern,$replacement,$html); print nl2br(htmlspecialchars($result)); print "<hr>"; print "idやclass付<br>\n"; $pattern="/(<h3(?:| .*?)>)(.*?)(<\\/h3>)/mis"; $replacement="$1<span>$2</span>$3"; $result=preg_replace($pattern,$replacement,$html); print nl2br(htmlspecialchars($result));

toggle
質問者

お礼

意図した通りに動きました。 wordpressが自動で吐き出すp、brタグも生きた状態で表示したかったので、functions.phpに下記のコードを記入してバッチ師動きました。 function add_h3_placeholders( $content ) { $content = preg_replace( '/(<h3(?:| .*?)>)(.*?)(<\\/h3>)/mis','<h3><span>$2</span>$3', $content ); return $content; } add_filter( 'the_content', 'add_h3_placeholders', 99 ); とても勉強になりました。 ありがとうございます。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

<h3>にidやclassは絶対にない仕様かどうかによって書き方が変わると思います <h3 id="xxx" class="yyy zzz">hoge</h3> にマッチさせるかどうかということ

toggle
質問者

補足

今現在ではid、classは使う予定はないですが、使う場合があるかもしれません。 ある場合と、ない場合の方法が知りたいです。

関連するQ&A

  • Parse error: syntax error

    Parse error: syntax error, unexpected $end in ...on line 19について wordpressの方で、functions.phpに書いたものが、前に一度機能していたはずのソースが他の記述を加えたりしていたらエラーになってしまいました。今は下記だけです。どこが間違っているのでしょうか?前と同じソースをコピペしているので、原因がわかりません。 <?php function replaceImagePath($arg) { $content = str_replace('"images/', '"' . get_bloginfo('template_directory') . '/images/', $arg); return $content; } add_filter('the_content', 'replaceImagePath');

    • 締切済み
    • PHP
  • WordPressで画像に枠が入ってしまいます。

    WordPressで画像に枠が入ってしまいます。 wordpressでblogを作成しておりますが、画像を投稿したり、img画像を貼り付けるとborderとも違う枠がついてしまいます。 自分で、枠をはずそうと以下の二つを試みましたが解消されません。 1、テーマのstyles.css内に a img {border: 0px;} を追記する 2、テーマのfunction.php内に define('CAPTIONS_OFF', true); add_filter('disable_captions', create_function('','return true;')); を追記する この他に解消する方法はありますでしょうか? もしくは、上記のやり方に謝りがあるのでしょうか? ご存知の方、いらっしゃいましたら、何卒宜しくお願い致します。 該当URL http://www.e-meishin.jp/wordpress/

  • 関数「create_function」について

    WordPressのテーマで、下記について質問です。 if($this->options['general']['clean_exerpts']) { add_filter('excerpt_more', create_function('', 'return "";') ); } if($this->options['general']['hide_wp_version']) { add_filter('the_generator', create_function('', 'return "";') ); } create_functionを使わないで別の関数を使いなさいと エラーが表示されるのですが、公式によると function() { // do something }); を使いなさいとあります。 上記PHPコードの場合、 add_filter('the_generator', function() {'', 'return "";'}); ); で合ってますか?教えてください

    • ベストアンサー
    • PHP
  • 正規表現で最短マッチは2回使えないのでしょうか?

    <やりたいこと> <span class="blue">データ</span> <br> の<br>タグを削除したいです。 <試したけどううまくいかなかった内容> $match = "/(<span class=\"blue;\">(.*?)<\/span>)(.*?)<br>/ism"; $replace = "<span class=\"blue;\">$1</span>"; $code = preg_replace($match, $replace, $code);

    • ベストアンサー
    • PHP
  • Wordpress初心者です

    wordpress初心者です。 wordpressを勉強しようとしていて、最初でつまづいてしまいました。 XAMPPを導入して、htdocs/wordpress/wp-content/themes/twentythirteen/index.php をhttp://localohst/wordpress/wp-content/themes/twentythirteen/index.php で表示させようとしたら、 Fatal error: Call to undefined function get_header() in C:\xampp\htdocs¥wordpress\wp-content\themes\twentythirteen\index.php on line 17 とエラーが出てしまって表示できません。何が原因でどのように対処すればよいのでしょうか? よろしくお願いします。

    • 締切済み
    • CSS
  • wordpressで余計な余白を削りたい

    WorpdressでTwenty Seventeenというテンプレートの子テーマを使っています。 静的HTMLページで作ったサイトをWordPressに持ってきたのですが、 静的ページより全体的に余白ができてしまって困っています。 画像と画像の間やヘッダーの上部です。 style.cssで追加したmarginやpaddingをいじっているのですが、静的ページと同じになりません。 余白を削る良い方法はありますでしょうか。 img { vertical-align:bottom; } で画像間の隙間を無くしてみました。 vertical-align:bottom; を追加する前とした後では隙間の出来が違うのですが、それでも静的ページと同じになりません。 「ヘッダー」もfunctions.phpに add_filter( ‘show_admin_bar’, ‘__return_false’ ); を追加したら追加する前よりは余白が減りましたがそれでも静的ページより余白ができてしまいます。 atyle.css以外の場所で余白を削るのかもしれません。

  • PHPで

    1. $html = preg_replace( '/ class=[\'"]([^\'"]+)[\'"]/i', '', $html ); return $html; と return preg_replace( '/(height|width)="\d*"\s/', "", $html ); の '/ class=[\'"]([^\'"]+)[\'"]/i' と '/(height|width)="\d*"\s/' の結果はどっちも中身を空欄にするのですが、なぜ=の右の表現方法が違いますか? 意味はどう違いますか? 2. それから、 $html = preg_replace( '/ class=[\'"]([^\'"]+)[\'"]/i', '', $html ); は return preg_replace( '/ class=[\'"]([^\'"]+)[\'"]/i', '', $html ); でも意味は同じですか? return $html;を使ったほうがいいですか? 3. それから '', $html と "", $html の意味は同じですか?

    • ベストアンサー
    • PHP
  • PHPの正規表現による文字列置換について

    下記のような文字列から「abcde」のみを変数に格納したいのですが、正規表現に苦戦しています。 http://example.com/detail.php?p=abcde.php 取得したい「abcde」のみが毎回変わり、その前後は固定です。 preg_replace()を使うのがいいのだろうなと思い、いろいろやってみているのですが、 なかなかマッチさせることができません。 どうかご教示頂けますでしょうか。

    • ベストアンサー
    • PHP
  • 正規表現

    正規表現に疎いので質問させてください。 $param = ereg_replace('/?$', '', $_SERVER['REQUEST_URI']); これをpreg_matchで書くとどうなりますか? よろしくお願い致します。

    • 締切済み
    • PHP
  • WordPress 続きを読むのカスタマイズ

    初心者ですがお手柔らかに。 WordPress Twenty Elevenで子ページ(template)を 作成しカスタマイズしています。作業は順調ですが、 以下の問題が発生しました。 投稿の文章途中に「続きを読む」を設定したいときは、 「more」ボタンを押せば<!--more-->となって作成され ます。しかし、プレビューしてみると「続きを読む」 という状態にならないのです。 おそらく子テーマを設定しているためだと推測しますが、 そのtemplateとしてアップしてあるfunctions.phpの中は <?php add_action( 'after_setup_theme', 'remove_body_class_singular' ); function remove_body_class_singular() { remove_filter( 'body_class', 'twentyeleven_body_classes' ); } ?> だけが書き込まれています。これは全ページをサイドバー に表示させるものであって「続きを読む」とは直接、 関係がなさそうです。どなたか解決策を教えてください。

    • ベストアンサー
    • PHP

専門家に質問してみよう