web-dev-qa-db-ja.com

the_contentから空の段落を削除しますか?

こんにちは、私は単に私のワードプレスの投稿に空の段落が作成されないようにしたいのです。手動でコンテンツをスペースしようとすると、これは非常によく起こります。

どうしてこれが効かないのかわかりませんか?

/*Remove empty paragraph tags from the_content*/
function removeEmptyParagraphs($content) {

    /*$pattern = "/<p[^>]*><\\/p[^>]*>/";   
    $content = preg_replace($pattern, '', $content);*/
    $content = str_replace("<p></p>","",$content);
    return $content;
}

add_filter('the_content', 'removeEmptyParagraphs');

編集/更新:

問題はこれのようです:

function qanda($content) {

    // filters for [q=some question] and [a=some answer]
    // wraps it inside of <div class="qanda"><div class="question"> </div><div class="answer"> </div></div>
    $content = preg_replace('/\[q=(.+?)].+?\[a=(.+?)]/is', '<div class="qanda"><div class="question">$1</div><div class="answer">$2</div></div>', $content);

    return $content;
}

add_filter('the_content', 'qanda');

私は自分の投稿とページの一種のショートコードパターンをフィルタリングするために自分自身でこの機能を実行しました。私のバックエンドでは、投稿は段落や不要なスペースなしで完全に行われていますが、結果は次のようになります。

<div class="entry">

    <p></p>
    <div class="qanda">...</div>
    <p></p>
    <p></p>
    <div class="qanda">...</div>
    <p></p>
    <p></p>
    <div class="qanda">...</div>

</div>

この空のpがどこから来るのか、何か考えはありますか?

33
mathiregister

WordPressは自動的に<p>タグと</p>タグを挿入して、投稿またはページ内のコンテンツの区切りを分離します。何らかの理由でこれらを削除する必要がある場合、または削除する必要がある場合は、次のコードスニペットのいずれかを使用できます。

Wpautopフィルタを完全に無効にするには、次のようにします。

remove_filter('the_content', 'wpautop');

それでもこれを機能させたい場合は、フィルタに後で優先度の値を追加してみてください。

add_filter('the_content', 'removeEmptyParagraphs',99999);
20
Bainternet

私はあなたと同じ問題を抱えていました。私はただしました...言わせてください...非常に美しい解決策ではありませんが、それは動作し、これまでのところ私が持っている唯一の解決策です。私は少しJavaScriptの行を追加しました。それはjQueryを必要とします、しかし私はあなたがそれなしでそれを理解することができると確信しています。

これは私の小さなJSです。

$('p:empty').remove();

これは私のために働きます!

20
David Faber

単純にCSSを使う

p:empty {
  display: none;
}

私はこれが既に '解決済み'とマークされていることを知っていますが、参考のために、投稿にマークアップを追加することなくあなたが望むものを正確に実行する関数です。これをあなたのテーマのfunctions.phpに入れるだけです:

add_filter('the_content', 'remove_empty_p', 20, 1);
function remove_empty_p($content){
    $content = force_balance_tags($content);
    return preg_replace('#<p>\s*+(<br\s*/*>)?\s*</p>#i', '', $content);
}

これはこの要旨からです: https://Gist.github.com/1668216

10
Michelle

その厄介なwpautopがフックアップしてマークアップと混同される前に、単にフィルタを実行することができます。

add_filter('the_content', 'qanda', 7 );

このようにして、フックするまでに必要なものをすでに変換しているので、場合によっては役に立ちます。

5
t31os

私の前で2つの答えと同じアプローチが、彼が私のために働かなかったので更新された正規表現。

正規表現:/<p>(?:\s|&nbsp;)*?<\/p>/i(pタグの中にある任意の数の空白または&nbsp;sを探す非キャプチャグループ。すべて大文字と小文字は区別されません。

add_filter('the_content', function($content) {
    $content = force_balance_tags($content);
    return preg_replace('/<p>(?:\s|&nbsp;)*?<\/p>/i', '', $content);
}, 10, 1);
3
kater louis

これは、文字列からすべての空のHTMLタグを再帰的に削除します。

add_filter('the_content', 'remove_empty_tags_recursive', 20, 1);
function remove_empty_tags_recursive ($str, $repto = NULL) {
         $str = force_balance_tags($str);
         //** Return if string not given or empty.
         if (!is_string ($str)
         || trim ($str) == '')
        return $str;

        //** Recursive empty HTML tags.
       return preg_replace (

              //** Pattern written by Junaid Atari.
              '/<([^<\/>]*)>([\s]*?|(?R))<\/\1>/imsU',

             //** Replace with nothing if string empty.
             !is_string ($repto) ? '' : $repto,

            //** Source string
           $str
);}

パターンは http://codesnap.blogspot.in/2011/04/recursively-remove-empty-html-tags.htmlから取られます

0
user2914440

コンテンツに空白を含む<p>タグがある場合は、投稿またはページに移動して、視覚的なスタイルではなく編集してください。

そこにいくつかの&nbsp;が見つかります。それを削除すると、空の<p>タグが消えます。

0
Christian Isak

HTMLコンテンツのみを含まないようにするには

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_title(); ?>
<?php echo $post->post_content; ?>
<?php endwhile; endif; ?>
0
Shashank

私はこの奇妙なことを発見しました、しかし実際にthe_content()を呼び出すことはあなたが説明する方法で段落を挿入するでしょう。基本的に入力したようなHTMLコードが必要な場合(編集時の "view HTML"と同じ)は、フォーマットと段落タグなしでコンテンツを返すget_the_content()を使用します。

それを返すので、必ず次のようにしてください。

 echo get_the_content(); 

また見なさい: http://codex.wordpress.org/Function_Reference/get_the_content

0
cwd