In case you ever need to find and replace a text string in every post or page of your WordPress site, this SQL code will help you out. I recently had to move a client’s website from staging into production, and just when I was getting ready to publish the new site I realized WordPress’s HTML editor had hard-coded the URLs of every image in every post to the address of the staging server. This is actually a feature of WordPress; when you upload an image into a post or page it uses an absolute URL, not a relative one. This really helps you out if any of your posts get picked up via RSS and published elsewhere, since the images will remain intact thanks to the absolute URLs.
NOTE: An absolute URL is the fully qualified path to a resource; such as http://www.barrywise.com/images/image.jpg. A relative URL will only work when the file is relative to the path of the current page, such as ../images/image.jpg.
So here I was with a couple hundred pages of content with image URLs all pointing to the wrong address on the staging server. I needed a quick way to do a find and replace on every post in the WordPress MySQL database. It was actually pretty simple. In my case, I just had to execute this SQL code against the MySQL WordPress database:
UPDATE wp_posts SET post_content = REPLACE(post_content, 'staging.server.com', 'www.productionserver.com');
This code will search through every “post_content” field in the wp_posts table and replace the staging URL address (staging.server.com) with the production address (www.productionserver.com). The format is easy to understand and can of course be used with any MySQL table, not just WordPress:
UPDATE [your_table_name] SET [your_table_field] = REPLACE([your_table_field], '[string_to_find]' , '[string_to_be_replaced]');
I realize this isn’t the most complex or enlightening code sample, but I hope this helps anyone stuck with an annoying repetitive text string in all your WordPress posts which you’d like to search and replace with one quick command.