удалить пустые абзацы из the_content?

Эй, ребята, Я просто хочу предотвратить создание пустых абзацев в моем сообщении Wordpress. Это происходит довольно часто при попытке вручную разместить содержимое.

Я не знаю, почему это не вступает в силу?

/*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?

30 голосов | спросил mathiregister 3 PMpSun, 03 Apr 2011 14:13:16 +040013Sunday 2011, 14:13:16

9 ответов


18

WordPress автоматически вставляет теги <p> и </p>, которые разделяют разрывы контента в сообщении или на странице. Если по какой-либо причине вы хотите или должны удалить их, вы можете использовать любой из следующих фрагментов кода.

Чтобы полностью отключить фильтр wpautop, вы можете использовать:

remove_filter('the_content', 'wpautop');

Если вы все еще хотите, чтобы это функция, попробуйте добавить более позднее значение приоритета в свой фильтр, например:

add_filter('the_content', 'removeEmptyParagraphs',99999);
ответил Bainternet 3 PMpSun, 03 Apr 2011 16:15:51 +040015Sunday 2011, 16:15:51
19

У меня была та же проблема, что и у вас. Я просто сделал ... скажем ... не очень красивое решение, но оно работает, и пока это единственное решение, которое у меня есть. Я добавил немного строки JavaScript. Он нуждается в jQuery, но я уверен, что вы можете понять это.

Это мой крошечный JS:

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

Это работает для меня!

ответил David Faber 2 Jpm1000000pmMon, 02 Jan 2012 14:00:02 +040012 2012, 14:00:02
10

Я знаю, что это уже отмечено «разрешено», но только для справки, вот функция, которая делает именно то, что вы хотите, без необходимости добавлять разметку к сообщениям. Просто поставьте это в своих функциях 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

ответил Michelle 23 Mayam12 2012, 02:03:32
9

Просто используйте CSS

p:empty {
  display: none;
}
ответил at least three characters 30 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 30 Sep 2015 16:24:27 +0300 2015, 16:24:27
5

Вы можете просто запустить фильтр до того, как этот скверный wpautop будет подключаться и помешает разметке.

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

Таким образом, вы уже конвертировали то, что вам нужно, к тому времени, когда оно перехватывается, что в некоторых случаях помогает.

ответил t31os 6 PMpWed, 06 Apr 2011 16:40:17 +040040Wednesday 2011, 16:40:17
0

Я нашел это странным, но на самом деле вызов the_content() будет вставлять абзацы так, как вы описываете. Если вы хотите html-код, в основном, как вы его ввели (так же, как «просмотр HTML» при редактировании), используйте get_the_content(), который возвращает содержимое без форматирования и тегов абзацев.

Так как он возвращает его, убедитесь, что вы используете что-то вроде:

echo get_the_content ();

Смотрите также: http://codex.wordpress.org/Function_Reference/get_the_content

ответил cwd 3 PMpSun, 03 Apr 2011 18:40:24 +040040Sunday 2011, 18:40:24
0

Это будет рекурсивно удалять все пустые теги 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

ответил user2914440 7 Maypm14 2014, 17:37:39
0

Если у вас есть теги <p> с пробелом в содержимом, перейдите к своему сообщению или странице, отредактируйте его не в визуальном стиле.

вы можете найти там &nbsp;. Удалите его, и теги <p> исчезнут.

ответил Christian Isak 15 Maypm17 2017, 13:33:03
0

Тот же подход, что и 2 ответа передо мной, но обновленное регулярное выражение, потому что он не работал для меня.

regex: /<p>(?:\s|&nbsp;)*?<\/p>/i (группа без захвата ищет любое количество пробелов или &nbsp; s внутри p-тега, все случаи insenstive.

add_filter('the_content', function($content) {
    $content = force_balance_tags($content);
    return preg_replace('/<p>(?:\s|&nbsp;)*?<\/p>/i', '', $content);
}, 10, 1);
ответил kater louis 6 WedEurope/Moscow2017-12-06T13:33:01+03:00Europe/Moscow12bEurope/MoscowWed, 06 Dec 2017 13:33:01 +0300 2017, 13:33:01

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132