web-dev-qa-db-ja.com

画像からPタグを削除する

私はWordPress 4.2.2を使用していて、wysiwygに画像を追加するたびに、出力された画像を段落タグで囲みます。これらのタグを削除する必要があります。私がオンラインで見つけているように見えるすべては2011年からであり、それはうまくいくようではないようです。

私はfunctions.phpに次のようなものを入れてみました:

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

何もうまくいかないようです。どうすればこれを達成できますか。

ところで私はACF ProのwysiwygとJointsWPスターターテーマを使用しています、そして、それが違いを生じるならば、私の画像はリンクタグで包まれていません。

2
agon024

1)ACFでwpautop()をフィルタ処理します。

function filter_ptags_on_images($content) {
    $content = preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content);
    return preg_replace('/<p>\s*(<iframe .*>*.<\/iframe>)\s*<\/p>/iU', '\1', $content);
}
add_filter('acf_the_content', 'filter_ptags_on_images');
add_filter('the_content', 'filter_ptags_on_images');

もしあなたがそれらの両方を持っているならば、add_filterの後の優先順位でチェックしてみてください。テーマやプラグイン、ACFがあなたをオーバーライドしている可能性があります。

add_filter('acf_the_content', 'filter_ptags_on_images', 9999);
add_filter('the_content', 'filter_ptags_on_images', 9999);

2)wpautop()を編集してください:

<?php
remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'custom_wpautop' );
function custom_wpautop() {
 // copy wpautop() code at https://core.trac.wordpress.org/browser/tags/4.2.2/src/wp-includes/formatting.php#L373 and add img to the $allblocks variable
}

3)これは1つのタスクに対する多くのコードです。これを試してみてください: https://wordpress.org/plugins/preserved-html-editor-markup-plus

4)これはjavascriptを使って行われるので、達成しようとしている方法ほど良くはありませんが、これを試すことができます。

<script type="text/javascript">
jQuery(document).ready(function($){
    $('p > img').unwrap();
});
</script>

5)それがスタイルを混乱させているだけで、マークアップを気にしないのであれば:

<style type="text/css">
p > img {
    margin: 0 !important;
}
</style>
8
Bryan Willis