任何想法这个正则表达式可能有什么问题 - 它似乎没有找到任何东西:
function ad_content($content) {
if (is_single()) {
$find = '#<div id="attachment_(d+)" class="wp-caption aligncenter" style="width: (d+)px">(.*?)</div>#s';
$replace1 = '11111';
$content = preg_replace($find,$replace,$content,1);
}
return $content;
}
add_filter ('the_content','ad_content');
我尝试过一些基本的东西,例如
$find = '#attachment#';
这确实有效。
当我使用上面的正则表达式时,它不会替换任何东西,也不会给出任何错误。因此,我想它只是什么也找不到。这是它应该找到的内容:
<div id="attachment_167" class="wp-caption aligncenter" style="width: 600px"><a href="http://www.url.com"><img class="size-full wp-image-167" alt="text" src="http://www.url.com" width="600" height="776" /></a><p class="wp-caption-text">text – text</p></div>
我已经在这个正则表达式验证器上尝试过,它确实匹配。
答:
我想我终于想通了 - the_content钩子,似乎不适用于我的div。 就这么简单。
你的正则表达式对我来说是正确的,真的。
当我$replace1
更改为$replace
,以同意函数稍后的用法并删除if语句时,它似乎有效。 那是:
function ad_content($content) {
$find = '#<div id="attachment_(d+)" class="wp-caption aligncenter" style="width: (d+)px">(.*?)</div>#s';
$replace = '11111';
$content = preg_replace($find,$replace,$content,1);
return $content;
}
似乎按预期工作。 我猜$replace1
与 $replace
问题可能不在你执行的代码中(因为你没有检测到错误),那么你确定is_single()
在你测试它的上下文中返回 true 吗?
你应该使用domparser来获取"正确"div的内容。
想象一下,里面会有一个"div",或者div iteself可能是嵌套的:
<div>
Something else
<div id="thisIwantToMatch"> Foo <div>Bar</div> Baz </div>
Again something else
</div>
由于 End-Tag 不包含属性,因此很难 - 几乎不可能 - 使用正则表达式找到正确的属性。使用"懒惰"正则表达式将匹配<div id="thisIwantToMatch"> Foo <div>Bar</div>
而贪婪的正则表达式将匹配<div id="thisIwantToMatch"> Foo <div>Bar</div> Baz </div>Again something else</div>
显然,这两种情况都不是您想要的。