我试图从the_content WordPress中删除一个有ID的div。 我正在努力实现这样的目标
jQuery( "#some_id" ).remove();
但在服务器端,
我不知道如何在the_content过滤器钩子的服务器端执行此操作。
这是我想要实现的目标,
add_filter( 'the_content', 'my_the_content_filter', 20 );
function my_the_content_filter( $content ) {
$content.find('#some_id').remove();
return $content;
}
答案 0 :(得分:1)
我认为这是您问题的答案:https://stackoverflow.com/a/1114925/7335278
在您的情况下,这将是:
add_filter( 'the_content', 'my_the_content_filter', 20 );
function my_the_content_filter( $content ) {
$doc = new DOMDocument();
$doc->loadHTML($content);
$element = $doc->getElementById('some_id');
$element->parentNode->removeChild($element);
$content = $doc->saveHTML();
return $content;
}
是的,请告诉我们这是否有效。
欢呼,乔尔
答案 1 :(得分:0)
对不起以前的回答。 我迟到了,我所回答的并不是你所追求的。
这里可能有用。
$str = "<html><head></head><body><span id='remove_this'>This is one
text</span><br /><span>this is a text after that</span></body></html>";
$id_pos = strpos($str, 'remove_this');
$tmp_str = substr($str, ($id_pos-10), (strpos(substr($str, ($id_pos-10)), '</span>' )+7));
$str = str_replace($tmp_str, '', $str);
echo $str;
在上面的示例中,我首先搜索id在字符串中的位置。 比我做一个子字符串函数来获取html元素的开头,在这种情况下是span。 在相同的子字符串调用中,我搜索第一个结束的span标记,并在该位置添加7以包含结束的span标记。
比我替换原始字符串中子字符串的结果,你得到你想要的结果。
我知道总有更好的方法,但这是一个:)
注意:我的这个例子确实使用了id位置和标签开头之间的设定距离,因为它直接在开始之后。
所以有可能有更好的方法来获取php中<
的第一个实例,但我还不知道。
希望这可能会让你更进一步。 我也可以进入正则表达式,但这更容易,尽管除了最好的方法。 另一方面,正则表达式要复杂得多,而且我对这些东西并不熟悉。
干杯 并且一开始抱歉错误的答案。
答案 2 :(得分:0)
代码未经过测试。刚为你写的...检查这段代码...如果这给出任何语法错误plz修复并让我知道。但是在内容钩子里面,HTML / jsscripts没有运行,所以你可以尝试类似下面的内容 -
add_filter( 'the_content', 'my_the_content_filter', 20 );
function my_the_content_filter( $content ) {
$content = preg_replace("(<([a-z]+id=\"some_id\")>.*?</\\1>)is","",$content);
return $content;
}