我有一个wordpress博客,其中我尝试使用名为“搜索正则表达式”的插件删除部分帖子文本,我将其作为广告放在底部(不要问)
现在,我正在旋转几个月试图找到一个正确的答案,我知道mysql不完全支持正则表达式,即使尝试这样做也可能会很痛苦,所以我决定使用这个插件。
我的wordpress博客有几千个帖子,底部的代码几乎相同,代码看起来像这样:
<!--more-->
<br />
<center>
<table width="100%">
<tbody>
<tr>
<td bgcolor="#000000" style="text-align: center; font-size: 16px; font-weight: bold;">
<a href="http://myaffiliate.com/?q2=affiliateid" target="_blank" rel="nofollow" ><img title="blabla" src="http://someimage.com/somewhere></a><br />
<a href="http://myaffiliate.com/?q2=affiliateid" rel="nofollow" target="_blank"><b>Some random Blah</b></a>
</td>
</tr>
</tbody>
</table>
</center>
外面的一切都是固定的,不会改变,标签内的所有内容都随着每个帖子而变化。
现在,这是多行文字,我很难找到匹配的字符串,甚至工具,这可以帮助我解决这个难题。我在几个博客上传播了这个内容,并且我认为不是用相同的重复代码发送我的博客,而是在我的帖子中提供1/3的所有内容,我可以通过single.php简单地包含它
所以,我希望从我的数据库中永久删除它。
提前感谢您的帮助。
答案 0 :(得分:0)
我不是博客或正则表达式的专家,但你不能用python脚本替换所有文本来替换它吗?
像这样的东西
re.sub(r' <!--more-->
<br />
<center>
<table width="100%">
<tbody>
<tr>
[\.]+
</td>
</tr>
</tbody>
</table>
</center>
', "")
如果我没错,那应该找到找到广告的所有情况并用空字符串替换它:)
答案 1 :(得分:0)
您可以尝试这样的事情(在测试前始终备份)
global $wpdb;
$posts=$wpdb->get_results("SELECT ID,post_content FROM {$wpdb->posts} LIMIT 0,1");
foreach($posts as $p){
$pos = strpos($p->post_content, '<!--more-->');
$more_content = substr($p->post_content,$pos);
if($pos !== false && strstr($more_content,"myaffiliate.com" && $p->ID>0)){
$content = substr($p->post_content,0,$pos-1);
$wpdb->query($wpdb->prepare("UPDATE {$wpdb->posts} SET post_content='%s' WHERE ID=%d",$content,$p->ID));
}
}
这是未经测试的,但你明白了。
如果<!--more-->
包含字符串"myaffiliate.com"
,这将删除帖子内容部分(这有点懒惰匹配,但我们可以使用preg_match
或preg_replace
对其进行优化如果你需要的话。)
您可以在测试时使用LIMIT 0,1
,然后根据需要增加它。