Я столкнулся с небольшой проблемой кодирования с шаблоном WordPress. Это код, который я использую в шаблоне:
<?php echo teaser(40); ?>
В моих функциях я использую это, чтобы стричь теги и получать контент только из разрешенных тегов.
<?php function teaser($limit) { $content = explode(' ', get_the_content(), $limit); if (count($content)>=$limit) { array_pop($content); $content = implode(" ",$content).'...'; } else { $content = implode(" ",$content); } $content = preg_replace('/\[.+\]/','', $content); $content = apply_filters('the_content', $content); $content = str_replace(']]>', ']]>', $content); $content = strip_tags($content, '<p><a><ul><li><i><em><strong>'); return $content; } ?>
Проблема: я использую приведенный выше код для разметки тегов из содержимого, но WordPress уже помещает теги изображений в абзац. Таким образом, результат – это теги абзаца, где изображения удаляются.
Просто ради очистки моего кода и бесполезных пустых тегов. Мой вопрос заключается в том, как удалить пустые теги абзаца?
<p></p>
Заранее большое спасибо! 🙂
используйте это регулярное выражение для удаления пустого абзаца
/<p[^>]*><\\/p[^>]*>/
пример
<?php $html = "abc<p></p><p>dd</p><b>non-empty</b>"; $pattern = "/<p[^>]*><\\/p[^>]*>/"; //$pattern = "/<[^\/>]*>([\s]?)*<\/[^>]*>/"; use this pattern to remove any empty tag echo preg_replace($pattern, '', $html); // output //abc<p>dd</p><b>non-empty</b> ?>
Это избавляет от всех пустых тэгов, даже если они содержат spaces
или &nbps;
внутри.
$str = "<p> </p><p> </p><p> </p><p>Sample Text</p>"; echo preg_replace("/<p[^>]*>[\s| ]*<\/p>/", '', $str);
Это только отголоски <p>Sample Text</p>
Используйте str_replace для удаления пустых тегов <p></p>
.
$content = str_replace("<p></p>","",$content);
Все более продвинутые будут нуждаться в регулярных выражениях.
$content = preg_replace('/<p[^>]*?></p>/', $content);
Обновление: должно быть:
$content = preg_replace('/<p [^>]*></p>/', $content);
Эта функция удаляет пустые элементы, а затем другие пустые элементы, созданные из предыдущих удаленных элементов. (Строка примера содержит пробелы, вкладки и возврат каретки).
function teaser( $html ) { $html = str_replace( ' ', ' ', $html ); do { $tmp = $html; $html = preg_replace( '#<([^ >]+)[^>]*>[[:space:]]*</\1>#', '', $html ); } while ( $html !== $tmp ); return $html; }
Имея следующий пример:
<?php $html = ' <p>Hello! <div class="foo"> <p id="nobody"> <span src="ok"> </span> </p> </div> </p> '; echo teaser( $html ); ?>
Функция возвращает:
<p>Hello! </p>
Удалите <p>
из вашего вызова strip_tags. Второй аргумент перечисляет допустимые теги (которые не удаляются).
$content = strip_tags($content, '<a><ul><li><i><em><strong>');
Вы пробовали решение CSS3?
p:empty {display: none;}