サポート » 使い方全般 » 投稿記事で画像のみPタグで囲いたくないのですが…

  • このソースを書いて、画像をPタグで囲わないように対応しておりました。

    function remove_p_on_images($content){
      return preg_replace('/<p>(\s*)(<img .* \/>)(\s*)<\/p>/iU', '\2', $content);
    }
    add_filter('the_content', 'remove_p_on_images');

    <img src="https://XXXX.com/wp-content/uploads/2018/02/XXX.png" alt="XXX" class="size-full wp-image-56" />

    画像はこのような感じで挿入しています。

    いざ投稿してみると、一番上に入れた画像にはPタグはつかないのですが、2枚目以降が全てPタグでくくられてしまいます。

    プラグイン止めたり、functions.phpからあれこれ削除してみたりとしてみたのですが、改善されませんでした。
    どなたかご教授いただけませんでしょうか。
    よろしくお願いいたします。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • 文字を入力した際に改行の有無等で変わると思います。
    要は画像の前後に続けて文字があると一緒に括られてしまうので、その辺りを上手く調整するしか方法はないと思います。

    トピック投稿者 shinkichi

    (@shinkichi)

    早々のご回答ありがとうございました。

    それがですね、それかも知れないと思って、画像の前後にはテキストを入れずにしてみたり、逆に詰めてみたりとやってみたのですが、どうやっても画像単体でくくられてしまうのです。

    でもじゃあなぜ、一番先頭に入れている画像はくくられないのか。
    これはこれで謎に思っています。

    One Regex to Rule them all: Removing wrapping <p> tags around images in WordPress while preserving links
    http://micahjon.com/2016/removing-wrapping-p-paragraph-tags-around-images-wordpress/

    正規表現についても解説してるので参考になると思います。

    トピック投稿者 shinkichi

    (@shinkichi)

    再度のご回答ありがとうございました。
    ご丁寧に参考サイトまで提示していただいて重ね重ねありがとうございます。

    しかし英語の読解力がないため、何のことやらといった感じです。
    何となくわかる部分もありましたので、参考にしてやってみましたがダメでした。
    ひとまずPタグが入っても問題ないように対応しようと思います

    最近、考えるのが面倒なので試したままの事を書きますが、試した限り英語サイトのコードでも提示されてたコードでも画像はPタグで括られなくなるのでshinkichiさんのテーマ等の影響ではないですか?
    テーマを一時的に別のものに変えたらどうなるかなど試してみてはどうでしょうか。それで変化がなければプラグインの全停止もお試しください。

    こんにちは

    preg_replace( '/<p>([^<]*<img .* \/>[^<]*)<\/p>/iU', '\1', $content );

    では、どうでしょうか。

    トピック投稿者 shinkichi

    (@shinkichi)

    manbo様、ishitaka様
    お二方ともにお礼が遅くなってしまいすみませんでした。

    その後調べてみて発覚したことが一つありました。
    同じテーマを使ったテストサイトでは、画像がPタグで囲まれておりませんでした。
    今回うまくいっていないサイトとはサーバー違うのですが、サーバー違いが原因なんてこと、あるのでしょうか…?

    それでishitaka様がご提示してくださったもので試したのですが、だめでした。
    これでうまくいけば言うことなかったのですが。

    もう少し、合間を縫って調べてみようと思います。
    重ね重ねありがとうございました。

    トピック投稿者 shinkichi

    (@shinkichi)

    ishitaka様
    ちなみにですが、

    function remove_p_on_images($content){
      return preg_replace( '/<p>([^<]*<img .* \/>[^<]*)<\/p>/iU', '\1', $content );
    }
    add_filter('the_content', 'remove_p_on_images');

    という記述でよろしかったですよね?
    これでダメでした…

    こんにちは、

    WordPressっぽくはないですけど、こんなのではどうでしょうか?

    https://tenman.info/labo/css/?p=8613

    functions.phpに追加

    
    add_action( 'wp_print_footer_scripts', 'my_remove_p' );
    
    function my_remove_p() {
    ?><script>
    	jQuery( function ( $ ) {
    
    	          $( 'img' ).each( function () {
    
    	              if ( $( this ).parent().is( "p" ) ) {
    
    	                  $( this ).unwrap();
    	              }
    	          } );
    	      } );
    	</script><?php
    }
    
    • この返信は6年、 2ヶ月前にnobitaが編集しました。
    トピック投稿者 shinkichi

    (@shinkichi)

    nobita様

    ご回答ありがとうございました。
    これでうまくいきました!
    確かにWordPressっぽくはないですねw
    でも確実に反映されたので僕的には何の問題ございません。

    しかしサーバー違いで動作したりしなかったりというのは気がかりではあります…

    とにもかくにも、重ね重ねありがとうございました!

    しかしサーバー違いで動作したりしなかったりというのは気がかりではあります…

    サーバーの違いで動作したりしなかったりというのは、よくわかないですが

    HTMLの構造の違いで、pタグで囲まれないケースというのは、ちょいちょいあるので

    
    <table>
    <tr>
    <td><img src="" alt="" width="644" height="477" class="alignleft size-large wp-image-49695" /></td>
    </tr>
    </table>
    

    とか、

    
    <figure><img src="" alt="" width="644" height="477" class="alignleft size-large wp-image-49695" /></figure>
    

    といったパターンだと、P要素でラップされないといった事がありますので、画像の親要素の違いや、画像タグの前後の改行の数に左右されるので、そのあたり、時間のある時にでも、いろいろ試してみてください。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「投稿記事で画像のみPタグで囲いたくないのですが…」には新たに返信することはできません。