Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I had used the ZD Video Plugin for WP a long time, and now, since my move to WP 3.0.2, it doesn't work anymore. To embed a YouTube video using the plugin, I would just write

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

Now I need to go back to plain YouTube embedding. How do I write a MySQL query that searches for [zdvideo]*[zdvideo] and replaces it with *?

share|improve this question
add comment

3 Answers

up vote 5 down vote accepted

What about these two queries?

UPDATE wp_posts SET post_content = REPLACE(post_content, '[zdvideo]', '');
UPDATE wp_posts SET post_content = REPLACE(post_content, '[/zdvideo]', '');
share|improve this answer
    
That'll only work if entering the YouTube URL is enough for his purpose. If there are things like <div>[zdvideo]...[/zdvideo]</div> the oEmbed functionality will be broken. –  Denis Dec 6 '10 at 15:14
2  
@Denis: If he wants to use the oEmbed stuff, I think you can also replace [zdvideo] with [embed], which will work even if the URL is not on a single line. –  Jan Fabry Dec 6 '10 at 22:44
    
Thanks for the tip! Now if I want to replace all instances of http://youtube.com with httpv://youtube.com, I can use the REPLACE function as shown above, right? –  GPX Dec 8 '10 at 8:36
add comment

Best I'm aware, MySQL doesn't have much of a regexp replace functionality -- not to mention its very clunky regexp syntax. So this is easiest to do at the php level. Start by fetching all posts that have the shortcode:

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

And then loop through the result:

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)
  );
}
share|improve this answer
add comment

or use the plugin Search & Replace, makes easy for use sql inside WP; use the like statement and give you an gui for search/replace strings in content and other tables.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.