web-dev-qa-db-ja.com

すべての投稿でテキストを検索して置換する

私は長い間WPにZDビデオプラグインを使用していましたが、今では私がWP 3.0.2に移行してからもう動作しません。プラグインを使ってYouTubeのビデオを埋め込むには、

[zdvideo] url-of-youtube-video [/ zdvideo]

さて、私は普通のYouTubeの埋め込みに戻る必要があります。 [zdvideo]*[zdvideo]を検索し、それを*に置き換えるMySQLクエリを書くにはどうすればいいですか?

2
GPX

これら二つの質問はどうですか?

UPDATE wp_posts SET post_content = REPLACE(post_content, '[zdvideo]', '');
UPDATE wp_posts SET post_content = REPLACE(post_content, '[/zdvideo]', '');
5
TheDeadMedic

ご存じのとおり、MySQLには正規表現置換機能があまりありません。非常に扱いにくい正規表現構文は言うまでもありません。したがって、これはphpレベルで行うのが最も簡単です。ショートコードを含むすべての投稿を取得することから始めます。

$posts = $wpdb->get_results("
SELECT ID, post_content
FROM $wpdb->posts
WHERE post_content LIKE '%[zdvideo]%'
");

そして結果をループします。

foreach ($posts as $post) {
  $post->post_content = preg_replace(
    "/\\[zdvideo\\](.+?)\\[\\/zdvideo\\]/",
    "$1", # $1 holds the url... format as needed
    $post->post_content);

  # Be sure to verify on a few posts before actually saving...
  # var_dump($post->post_content);

  $wpdb->query("
  UPDATE $wdpb->posts
  SET post_content = '" . $wpdb->escape($post->post_content) . "'
  WHERE ID = " . intval($post->ID)
  );
}
5

またはプラグイン 検索と置換 を使用すると、WP内でsqlを簡単に使用できます。 likeステートメントを使用して、コンテンツや他のテーブルの検索/置換文字列を表示します。

1
bueltge