2016-12-27 146 views
-1

我有以下代碼,它可以提取blockquote並將我的WordPress帖子內容放入<p>標籤中。從段落標籤中刪除圖片

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

但是它把圖像中,我不想

+0

1.你想做什麼? 2.你是否嘗試自己寫點東西? 3.輸出是怎樣的? – Dekel

+0

您可能需要爲圖像運行另一個'''preg_replace'''。 [Here](http://wordpress.stackexchange.com/questions/7090/stop-wordpress-wrapping-images-in-a-p-tag)是一個模式的例子。 – CUGreen

回答

1

這裏<p>標籤是一些代碼,應該這樣做(未測試)。

<?php 
    $content = preg_replace('/<blockquote>(.*?)<\/blockquote>/', '', get_the_content()); 
    $content = wpautop($content); // Add paragraph-tags 
    $content = str_replace('<p></p>', '', $content); // remove empty paragraphs 
    $content = preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content); // remove paragraphs around img tags 
    echo $content; 
?> 
+0

似乎工作謝謝你!我知道很多人說不要使用pregreplace – user3550879

+0

也許是因爲代碼注入的危險,不確定。 – CUGreen

0

str_replace後的線,你可以使用這個domDocument方法:

$dom = new domDocument; 
$dom->loadHTML($content); 
$dom->preserveWhiteSpace = false; 
$images = $dom->getElementsByTagname('img'); 
$removeList = array(); 
foreach ($images as $domElement) { 
    $removeList[] = $domElement; 
} 
foreach ($removeList as $toRemove) { 
    $toRemove->parentNode->removeChild($toRemove); 
} 
$content = $dom->saveHTML(); 

(PS:這也會給你一個非preg_replace方法,而不是它真正的問題)

+0

我似乎從來沒有把domDocuments,他們似乎總是拋出錯誤或只是不工作 – user3550879

+0

我一直在使用上述多年。零錯誤總是有效的。沒有複雜的'preg_replace()'。 – Abela

+0

哦,好吧,那就是我的結局。我通常只是將這些類型的代碼放在標籤中 – user3550879