2016-06-02 9 views
1

У меня есть следующие 2 набора кода (Wordpress) с использованием regex, но мне сказали, что это плохая практика.
Я использую его 2-мя способами:Изменение кода из regex

  1. Для Аке вне BLOCKQUOTE и изображения с поста и просто отображать текст.
  2. По существу сделать обратное и отобразить только изображения.

Глядя, чтобы написать его в надлежащей более приемлемой/кросс-браузерной форме.

HTML (отображение текста):

<?php 
$content = preg_replace('/<blockquote>(.*?)<\/blockquote>/', '', get_the_content()); 
$content = preg_replace('/(<img [^>]*>)/', '', $content); 
$content = wpautop($content); // Add paragraph-tags 
$content = str_replace('<p></p>', '', $content); // remove empty paragraphs 
echo $content; 
?> 

HTML (отображение изображений):

<?php 
preg_match_all('/(<img [^>]*>)/', get_the_content(), $images); 
for($i=0; isset($images[1]) && $i < count($images[1]); $i++) { 
    if ($i == end(array_keys($images[1]))) { 
     echo sprintf('<div id="last-img">%s</div>', $images[1][$i]); 
     continue; 
    } 
    echo $images[1][$i]; 
} 
?> 

ответ

0

Вы можете использовать ответ здесь: Strip Tags and everything in between

Дело в том, чтобы использовать анализатор , а не рулонное собственное регулярное выражение, которое может быть ошибкой.

$content = get_the_content(); 
$content = wpautop($content); 

$doc = new DOMDocument(); 
$doc->loadHTML(get_the_content(), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); 

$xpath = new DOMXPath($doc); 

foreach ($xpath->query('//blockquote') as $node) { 
    $node->parentNode->removeChild($node); 
} 

foreach ($xpath->query('//img') as $node) { 
    $node->parentNode->removeChild($node); 
} 

foreach($xpath->query('//p[not(node())]') as $node) { 
    $node->parentNode->removeChild($node); 
} 

$content = $doc->saveHTML($doc); 

Вы можете обнаружить, что PHP DOMDocument обернул свой HTML-фрагмент в <html> тегов, в этом случае взгляд на How to saveHTML of DOMDocument without HTML wrapper?

та часть, которая удаляет пустые p теги от Remove empty tags from a XML with PHP

+0

Как бы я помещаю каждый кусок обратно в страницу html после того, как он вынут? в разных местах? Я использовал эхо в своем предыдущем коде – user3550879

+0

Просто используйте 'echo' снова. Попробуйте 'echo $ content' в конце кода выше –

+0

не все это вернет? – user3550879

Смежные вопросы