0

私は wordpress ブログを持っています。そこでは、' Search Regex ' という名前のプラグインを使用して、下部に広告として配置した投稿テキストの一部を削除しようとしています (質問しないでください)。

今、私はこれについて適切な答えを見つけようと数ヶ月間ぐるぐる回っています.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

私はブログや正規表現の専門家ではありませんが、Pythonスクリプトを使用して、すべてのテキストを置き換えて置き換えることはできませんか?

このようなもの

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

 [\.]+

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

私が間違っていなければ、広告が見つかったすべてのケースを見つけて、空白の文字列に置き換える必要があります:)

于 2013-03-03T03:50:29.647 に答える
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して、必要に応じて増やすことができます。

于 2013-03-04T12:58:54.543 に答える