2013-02-14 19 views
0

我試圖從the_content()中刪除所有<img>以及對於特定頁面模板的<a>標籤。我已經找到了一些解決方案,包括preg_replace和使用get_the_content(),但是當使用get_the_content()時,段落周圍沒有<p>如何從特定頁面模板上的the_content()中刪除所有具有和不包含鏈接的圖像

如何在頁面模板上過濾the_content()以刪除所有<a><img></a><img>標籤?

我已被勸告here不是爲了使用preg_replace而是DOM。 由於我是一名PHP菜鳥,因此推動正確的方向將會很棒。

+1

推在正確的方向:http://stackoverflow.com/search?q=remove+html+user%3A208809 – Gordon 2013-02-14 16:08:43

+1

樣板代碼用DOM刪除元素總是一樣的。你可以在上面的鏈接中找到足夠的例子。唯一不同的是你如何獲得元素。爲了得到所有具有圖像子元素的元素,您可以使用'// a [img]'。爲了獲得所有圖像,你可以使用// img。你可以通過在它們之間加入'|'來組合這兩個。 – Gordon 2013-02-14 16:22:37

+0

謝謝@戈登我會研究上面的例子,並在我得到某些東西時回報。 – fabianmoronzirfas 2013-02-14 19:18:00

回答

0

好的我會回答我自己的問題,但首先感謝Gordon推動我走向正確的方向。我的結果是基於stackoverflow上的this問題。

它使用DOM而不是preg_replace()就像我在很多例子中看到的那樣。
有件事要提的是,我需要使用get_the_content()而不是the_content(),因爲the_content()與回波結果相關。但在codex是一個提示如何過濾get_the_content()實現與the_content()相同的輸出。

這裏是代碼,做什麼,我想:

$dom = new DOMDocument; 
$dom->loadHTML(get_the_content()); 
$xpath = new DOMXPath($dom); 

$nodes = $xpath->query('//img|//a[img]'); 
foreach($nodes as $node) { 
    $node->parentNode->removeChild($node); 
} 
$no_image_content = $dom->saveHTML(); 
$no_image_content = apply_filters('the_content', $no_image_content); 
$no_image_content = str_replace(']]>', ']]&gt;', $no_image_content); 
echo $no_image_content; 
相關問題