Ages ago, back when I created my first dynamic ASP web pages, they had an ever changing tagline. Some taglines were funny, some were sad, some were crazy, but I enjoyed them as homage to the, now forgotten, BBS era. As I moved from one hand-built platform to another, I kept this feature alive.
I started blogging much later on the Google's Blogspot and it wasn't possible to get dynamic taglines there. Later, when I moved the whole blog to WordPress and merged it with my original pages, end result was more of a blog. And thus taglines were no more. They were relegated to manually changing Skype status to entertain a friend or two. Until now.
My goal was to create the simplest and reasonably performant way of selecting a random tagline from flat text file.
One approach fitting with WordPress would be to create plugin but I opted not to. Since I really wanted to change tagline once a day, plugin would be probably a bit of overkill. Instead I opted to (ab)use fact WordPress already has tagline-like field called Blog description and all we need to do is change it to text of our choice.
Of course, before we even come to that step, we have to extract tagline from file. Fortunately Linux offers shuf
utility to randomly select one line of many. All needed is to give it a plain text file. Of course, we should escape all single quotes to avoid any SQL issues. If we (hopefully correctly) assume text file with taglines is under your control, simple escaping is sufficient:
TAGLINE=`shuf -n 1 ~/taglines.txt | sed "s/'/''/g"`
With tagline in hand we can go and change blog description directly:
mysql --execute="UPDATE wp_options SET option_value='$TAGLINE' WHERE option_name='blogdescription';"
While this will change description, if you use caching plugin, it won't be enough. You also need to clean cache. The easiest approach is to simply delete cache folder. As we do it only once per day, this won't be too much of a hit. Different caches might use different locations, but for W3 Total Cache I use here, following is enough:
rm -R ~/www/wp-content/cache
All left to do is getting this script to be executed daily by either using web interface of your web provider or setting it up in crontab
manually.
PS: Instead of using shuf
, you can use sort -R ~/taglines.txt | head -1
.
PPS: Full script I use is here:
#!/bin/bash
MYSQL_USER=WordPress MySQL user
MYSQL_PASSWORD=WordPress MySQL password
MYSQL_HOST=WordPress MySQL host
MYSQL_DATABASE=WordPress MySQL database
TAGLINE=`shuf -n 1 ~/taglines.txt | sed "s/'/''/g"`
mysql --host=$MYSQL_HOST --user=$MYSQL_USER --password=$MYSQL_PASSWORD --database=$MYSQL_DATABASE --execute="UPDATE wp_options SET option_value='$TAGLINE' WHERE option_name='blogdescription';"
rm -R ~/www/wp-content/cache 2> /dev/null