In my experiments with WordPress I have discovered an annoying complication when it comes to changing servers. When you change the address of your wordpress site, links to images and other files inside posts are not updated to point to the new wordpress URL. Links to the posts themselves are all updated but for whatever reason WordPress ignores post content.
What this means is if you transform a staging server (say, http://server) into a “production” server (say, http://jeppson.org) posts containing links to any files on that server will now be (silently!) broken. The files are all still there, the posts just point to the old address instead of the new one.
There are numerous plugins for WordPress that can take care of this; however I am averse to installing random WordPress plugins due to security concerns. Fortunately, the fix for this vexing problem is a fairly simple one. It requires executing a command on the MySQL database hosting the wordpress site.
The table we are interested in is the <prefix>_posts table. <prefix> was defined when the wordpress site was set up. If you don’t remember what that prefix was, take a peek at /wp-config.php line 62
The field we are interested in is post_content – this is where all the links to pictures in your various posts resides. From here execute the update command and use the replace function to find all instances of the old URL and update them with the new URL
That’s it! Your images should now re-appear. The two commands I used in my specific example are below. Be sure to replace the following :
- wordpress with the name of your wordpress database
- nm_posts with the name of your site’s post table,
- http://server with your original wordpress URL and
- http://jeppson.org with your new wordpress URL
mysql -u root -p wordpress update nm_posts set post_content = replace(post_content, 'http://server' , 'http://jeppson.org');
Update: I’ve discovered a very handy script that will take care of this for you: wp-cli
To do the same thing as above with less steps, simply download wp-cli
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
Make the script executable and move it to /usr/bin
chmod +x wp-cli.phar sudo mv wp-cli.phar /usr/local/bin/wp
Navigate to the directory of your wordpress install and run wp search-replace
cd /var/www/wordpress wp search-replace 'http://server' 'http://jeppson.org'
Easy.