0

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

因此,我希望将其从我的数据库中永久删除。

提前感谢您的帮助。

4

2 回答 2

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在测试时使用,然后根据需要增加它。

于 2013-03-04T12:58:54.543 回答
0

我不是博客或正则表达式方面的专家,但您不能使用 python 脚本替换所有文本来替换它吗?

像这样的东西

    re.sub(r'     <!--more-->
<br />
<center>
<table width="100%">
<tbody>
<tr> 

 [\.]+

</td>
</tr>
</tbody>
</table>
</center> 
', "")

如果我没记错的话,那应该找到找到广告的所有情况并将其替换为空白字符串:)

于 2013-03-03T03:50:29.647 回答