正则表达式,wordpress和搜索Regex插件 - 删除会员链接

时间:2013-03-03 02:59:31

标签: regex wordpress replace

我有一个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简单地包含它

所以,我希望从我的数据库中永久删除它。

提前感谢您的帮助。

2 个答案:

答案 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_matchpreg_replace对其进行优化如果你需要的话。)

您可以在测试时使用LIMIT 0,1,然后根据需要增加它。