удалить пустые абзацы из the_content?
-
-
См. Вопрос: [Я использую фильтр для удаления автоматического переноса тегов
] (http://wordpress.stackexchange.com/questions/7846)
See the question: [I'm using a filter to remove thetags auto wrap](http://wordpress.stackexchange.com/questions/7846)
- 0
- 2011-04-03
- Chris_O
-
Попробуйте запустить свой фильтр до того,как это сделает `wpautop`,например.`add_filter ('the_content','qanda',7);` ..Try running your filter before `wpautop` does it's thing, eg. `add_filter('the_content', 'qanda', 7 );`..
- 1
- 2011-04-03
- t31os
-
@t31os: Можете ли вы переместить свой комментарий к ответу,чтобы мы могли проголосовать за него?@t31os: Can you move your comment to an answer so we can vote on it?
- 0
- 2011-04-06
- Jan Fabry
-
10 ответ
- голосов
-
- 2011-04-03
WordPress автоматически вставит теги
<p>
и</p>
,которые разделяют разрывы содержимого в записи или на странице.Если по какой-либо причине вы хотите или должны удалить их,вы можете использовать любой из следующих фрагментов кода.Чтобы полностью отключить фильтр wpautop,вы можете использовать:
remove_filter('the_content', 'wpautop');
Если вы все еще хотите,чтобы это работало,попробуйте добавить более позднее значение приоритета к вашему фильтру,например:
add_filter('the_content', 'removeEmptyParagraphs',99999);
WordPress will automatically insert
<p>
and</p>
tags which separate content breaks within a post or page. If, for some reason, you want or need to remove these, you can use either of the following code snippets.To completely disable the wpautop filter, you can use:
remove_filter('the_content', 'wpautop');
If you still want this to function try adding a later priority value to your filter something like:
add_filter('the_content', 'removeEmptyParagraphs',99999);
-
благодарю вас!Я знаю,что wordpress автоматически вставляет тегиp.Однако бывают случаи,когда где-то в моем контенте есть просто пустые теги
и автоформатирование.Я просто не хочу пустых букв!
thank you! I know wordpress automatically inserts p tags. However there happen some cases where there are just empty tags somewhere in my content (when i inspect it with some tool)... that happens when doing a lot of removal and editing of posts. I just don't want to have empty paragraphs in my content, that's all. I do need paragraphs, just not empty ones. The 99999 doesn't make a difference. Just doesn't work. the wpautop filter is not what I want. It prevents all's and autoformatting. I just don't want any empty p's!
- 2
- 2011-04-03
- mathiregister
-
Я обновил свой пост,так что вы понимаете,о чем я!Я сделал функцию,которая уже фильтрует контент.он вставляет div,и кажется,что wordpress вставляетi updated my post so you see what I mean! i did a function that already filters the content. it inserts divs and it seemes wordpress is inserting before and after it, i just don't get it. any ideas?
- 0
- 2011-04-03
- mathiregister
-
- 2012-01-02
У меня была та же проблема,что и у вас.Я только что сделал ... скажем так ... не очень красивое решение,но оно работает и пока что это единственное решение,которое у меня есть.Я добавил небольшую строку JavaScript.Для этого нуженjQuery,но я уверен,что вы справитесь и без него.
Это мой крошечный JS:
$('p:empty').remove();
У меня работает!
I had the same problem you have. I just did a... let's say... not very beautiful solution, but it works and so far it's the only solution I have. I added a little JavaScript line. It needs jQuery, but I'm sure you can figure it out without.
This is my tiny JS:
$('p:empty').remove();
This works for me!
-
о,разве это не сладкое маленькое число!Спасибо за совет - он работает для меня,и если кто-то еще задается вопросом,как его использовать,просто поместите его в пользовательский JS-файл вашей темы.oh aint that a sweet little number! Thanks for the tip - it works for me and in case anyone else wondered how to use it, just put it in your theme's custom JS file.
- 0
- 2012-09-06
- Sol
-
@D_N Использование CSS для скрытия пустых тегов абзаца работает только для `
\n
`.@D_N Using CSS to hide empty Paragraph tags only works for `` but doesn't work for `\n
`.- 0
- 2017-04-21
- Michael Ecklund
-
- 2015-09-30
Просто используйте CSS
p:empty { display: none; }
Simply use CSS
p:empty { display: none; }
-
Пожалуйста,добавьте пояснение к своему ответуPlease add an explanation to your answer
- 0
- 2015-09-30
- Pieter Goosen
-
@PieterGoosen это уже говорит само за себя@PieterGoosen it is already self-explanatory
- 4
- 2015-10-01
- at least three characters
-
Если вы просто не хотите отображать их в целях разделения,это хорошо работает вплоть до IE9.http://caniuse.com/#feat=css-sel3 и https://developer.mozilla.org/en-US/docs/Web/CSS/%3Aempty для получения дополнительной информации.If you just want to avoid displaying them for spacing purposes, this works well down to IE9. http://caniuse.com/#feat=css-sel3 and https://developer.mozilla.org/en-US/docs/Web/CSS/%3Aempty for more.
- 0
- 2016-01-03
- Will
-
хороший вариант с методом селектора CSS,не знал,что он существует.благодаря!nice option with CSS selector method, didn't know it existed. thanks!
- 1
- 2016-04-14
- i_a
-
К вашему сведению: если внутри тега
стоит ` `,это не сработает.
FYI: If there is ` ` inside thetag this won't work.
- 1
- 2019-06-06
- RynoRn
-
- 2012-05-22
Я знаю,что это уже помечено как «решено»,но для справки,вот функция,которая делает именно то,что вы хотите,без необходимости добавлять какую-либо разметку к сообщениям.Просто поместите это в файл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
I know this is already marked 'solved' but just for reference, here's a function which does exactly what you want without having to add any markup to posts. Just put this in your theme's 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); }
This is from this gist: https://gist.github.com/1668216
-
Небольшое замечание об использованииforce_balance_tags () ... Я столкнулся с хитрой ошибкой,вызванной этой функцией,когда она использовалась для контента,включающего JavaScript (JS исходил из Gravity Forms при использовании ajax в форме).Известны проблемы с `force_balance_tags`,когда он встречает символ` <`в определенных ситуациях.См. Билет [9270] (http://core.trac.wordpress.org/ticket/9270) для получения подробной информации.Just a little note about using force_balance_tags()... I ran into a tricky bug caused by this function when it was used on content that included JavaScript (JS was coming from Gravity Forms when using ajax on a form). There are known problems with `force_balance_tags` when it encounters the `<` character in certain situations. See ticket [9270]( http://core.trac.wordpress.org/ticket/9270) for details.
- 6
- 2013-08-14
- Dave Romsey
-
У меня была та же проблема,о которой говорил Дейв: фрагмент удалял встроенное видео YouTube,что также вызывало проблемы с проверкой на страницах amp.I had the same problem highlighted by Dave: the snippet removed embedded youtube video and that caused validation problems on amp pages also.
- 0
- 2019-06-29
- Marco Panichi
-
- 2011-04-06
Вы можете просто запустить свой фильтр до того,как этот неприятный
wpautop
зацепится и испортит разметку.add_filter('the_content', 'qanda', 7 );
Таким образом,вы уже преобразовали то,что вам нужно,к тому моменту,когда оно подключится,что в некоторых случаях действительно помогает.
You could just run your filter before that nasty
wpautop
hooks on and messes with the markup.add_filter('the_content', 'qanda', 7 );
That way, you've already converted what you need to by the time it hooks on, which does help in some cases.
-
- 2017-12-06
Такой же подход,как и два предыдущих ответа, но обновленное регулярное выражение,потому что это не сработало для меня.
регулярное выражение:
/<p>(?:\s| )*?<\/p>/i
(группа без захвата ищет любое количество пробелов или
внутриp-тега,все без учета регистра.add_filter('the_content', function($content) { $content = force_balance_tags($content); return preg_replace('/<p>(?:\s| )*?<\/p>/i', '', $content); }, 10, 1);
Same approach than 2 answers before me, but an updated regex, because his didn't work for me.
the regex:
/<p>(?:\s| )*?<\/p>/i
(non capture group looking for any number of either whitespace or
s inside p-tag, all case insenstive.add_filter('the_content', function($content) { $content = force_balance_tags($content); return preg_replace('/<p>(?:\s| )*?<\/p>/i', '', $content); }, 10, 1);
-
- 2011-04-03
Мне это показалось странным,но на самом деле при вызове
the_content()
абзацы вставляются так,как вы описываете.Если вам нужен html-код,в основном такой,как вы его ввели (то же,что и «просмотреть HTML» при редактировании),используйтеget_the_content()
,который возвращает содержимое без форматирования и тегов абзаца.Поскольку он его возвращает,убедитесь,что вы используете что-то вроде:
эхоget_the_content ();
См. также: http://codex.wordpress.org/Function_Reference/get_the_content
I found this weird, but actually calling
the_content()
will insert paragraphs in the manner you describe. If you want the html code, basically like you entered it (the same as "view HTML" when editing), then useget_the_content()
which returns the content without formatting and paragraph tags.Since it returns it, make sure you use something like:
echo get_the_content();
See also: http://codex.wordpress.org/Function_Reference/get_the_content
-
что ж,спасибо тебе.Однако я этого не хочу!Мне нужны нормальные абзацы.Во-первых,это семантическая разметка,а во-вторых,это именно то,что нужно.Мне просто не нужны пустые абзацы,в которых нет смысла!Просто потому,что я применил стиль к этим абзацам,с этим стилем появляются пустые абзацы,и моя страница выглядит странно.well, thank you. However I don't want that! I need normal paragraphs. First of it's semantic markup and secondly it's just the way it's supposed to. I just don't to have empty paragraphs that don't make sense! Simply because I have styling applied to those paragraphs also empty paragraphs appear with this styling and my page looks weird.
- 0
- 2011-04-03
- mathiregister
-
Мне действительно интересно,почему мой add_filter не работает?I actuall wonder why my add_filter thingy does not work?
- 0
- 2011-04-03
- mathiregister
-
Попался.Что ж,я бы порекомендовал попробовать переключиться с HTML на визуальный и обратно пару раз.Я считаю,что при загрузке редактора WYSIWYG он удаляет пустые теги абзацев.Gotcha. Well one thing I would recommend trying is switching from HTML to visual and back a time or two. I believe when the WYSIWYG editor loads it does remove empty paragraph tags.
- 0
- 2011-04-04
- cwd
-
- 2014-05-07
Это рекурсивно удалит все пустые теги 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
This will recursively remove all the empty html tags from the string
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 );}
Pattern is taken from http://codesnap.blogspot.in/2011/04/recursively-remove-empty-html-tags.html
-
- 2017-05-15
Если у вас есть теги
<p>
с пробелами в содержании, перейдите к своему сообщению или странице и отредактируйте его не в визуальном стиле.там можно найти
.. Удалите его,и пустые теги<p>
исчезнут.If you have
<p>
tags with whitespace in the content, go to your post or page an edit it not in visual style.you would be find some
in there.. Delete it and the empty<p>
tags will disappear. -
- 2018-09-19
Чтобы иметь только html-контент без тегов
<?php if (have_posts()) : while (have_posts()) : the_post(); ?> <?php the_title(); ?> <?php echo $post->post_content; ?> <?php endwhile; endif; ?>
In order to have only html content without
tags we can use the following loop to out put only the html without formatting of the post or page<?php if (have_posts()) : while (have_posts()) : the_post(); ?> <?php the_title(); ?> <?php echo $post->post_content; ?> <?php endwhile; endif; ?>
Привет,ребята! Я просто хочу предотвратить создание пустых абзацев в моем сообщении на WordPress. Такое случается довольно часто при попытке вручную разместить контент.
Я не знаю,почему это не действует?
изменить/обновить:
похоже,проблема в следующем:
Я сам выполнил эту функцию,чтобы отфильтровать своего рода шаблон шорткода в моих сообщениях и страницах. Несмотря на то,что в моем бэкэнде сообщение полностью выполнено без абзацев и ненужных интервалов,результат выглядит так:
есть идеи,откуда взялись эти пустыеp?