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 build a lot of websites with Wordpress, and my initial setup is basically always the same :

  • Latest version of WP
  • Latest versions of about 5 plugins
  • My naked development theme

Instead of downloading/uploading these things separately and do that by hand each time I start a new project, I'd like to create a bash script that would do this :

  • Download the latest version of Wordpress
  • Unzip
  • Download the latest version of plugin X
  • Unzip to WP plugins folder
  • Download my naked theme
  • Unzip to themes folder

Now downloading the latest WP is easy (http://wordpress.org/latest.tar.gz), downloading my naked theme too, but I'm having trouble getting the latest version of a plugin, as they are not called latest.tar.gz but specifict names with the version (ex: wptouch.1.9.26.zip)

EDIT : So I'm wonderning now if it's possible to use cURL in my bash script to find the exact URL of the Current version of a plugin. The idea would be to fetch the page, and then find the value of the href that is in the paragraph just after the <h3>Current Version</h3>.

Here's an example, all plugin download pages on WP are like this :

<h3>Current Version</h3>
<p class="unmarked-list">
    <a href="http://downloads.wordpress.org/plugin/jetpack.1.1.2.zip">1.1.2</a>
</p>
share|improve this question

3 Answers 3

To always get latest plugin take for example my plugin:

http://wordpress.org/extend/plugins/wordpress-file-monitor-plus/

the download link for the latest is:

http://downloads.wordpress.org/plugin/wordpress-file-monitor-plus.1.1.zip

but if you remove the version from the download link you always get the latest version:

http://downloads.wordpress.org/plugin/wordpress-file-monitor-plus.zip

EDIT: Have you considered keeping a folder of the latest wordpress and plugins unpacked? Then as soon as a new plugin or wordpress comes out you simply unpack that over what you have. Then your bash script just packages the whole lot to be used on an install.

share|improve this answer
1  
Dammit, that was easy, thanks. Now I'm off bash scripting, I hope I can put something together. I'll post the result here. –  mike23 May 13 '11 at 8:22
    
One question though, in your example wordpress-file-monitor-plus.zip is listed under "Development Version", that's not the same as the latest stable version, is it ? –  mike23 May 13 '11 at 8:43
    
Oh I see. This maybe not the latest version... It might be what's currently latest in the trunk. Sorry I might have miss informed you. –  Brady May 13 '11 at 9:38
    
@Brady's edit : Yes right now I have a "starter" WP install, with all my most used plugins installed + a blank theme. That works, but as plugins (and WP) get updates rather often, I was looking for something completely automated. –  mike23 May 13 '11 at 16:00
2  
I would go with SVN here. There you can checkout/export the tag with the highest number or just the trunk from every plugin. Same goes for the WordPress Core. –  rofflox May 14 '11 at 12:52

I created a bash script to update Wordpress using subversion as they recommend.

#!/bin/bash
# usage: upgrade_wordpress.sh X.X.X
# http://codex.wordpress.org/Installing/Updating_WordPress_with_Subversion

# http://stackoverflow.com/a/699613/327074
die () {
    echo >&2 "$@"
    exit 1
}

# check that there is one argument
[ "$#" -eq 1 ] || die "usage: upgrade_wordpress.sh X.X.X"
# http://stackoverflow.com/a/2220646/327074
response=$(curl --write-out %{http_code} --silent --output /dev/null http://core.svn.wordpress.org/tags/$1/)
# check that the tag repository exists, i.e. returns a HTTP 200 status code
[ "$response" -eq 200 ] || die "Couldn't find Wordpress version, http error: $response"
# Take a backup
mysqldump -u root -p wordpress > wordpress_upgrade_to_$1_bak.sql
# Updating to a New Stable Version
cd /path/to/wordpress/dir/
svn sw http://core.svn.wordpress.org/tags/$1/ .

I've modified this to do the installation. This second script is untested but it should get you started. You will need to write your own create_wordpress_database_and_user.sql - but you didn't ask for that in the question anyway, so maybe you can ignore it.

#!/bin/bash
# usage: install_wordpress.sh X.X.X /path/to/wordpress/dir
# http://codex.wordpress.org/Installing/Updating_WordPress_with_Subversion

# http://stackoverflow.com/a/699613/327074
die () {
    echo >&2 "$@"
    exit 1
}
# check that there are two arguments
[ "$#" -eq 2 ] || die "usage: install_wordpress.sh X.X.X /path/to/wordpress/dir"
# http://stackoverflow.com/a/2220646/327074
response=$(curl --write-out %{http_code} --silent --output /dev/null http://core.svn.wordpress.org/tags/$1/)
# check that the tag repository exists, i.e. returns a HTTP 200 status code
[ "$response" -eq 200 ] || die "Could not find Wordpress version, http error: $response"
# create directory if needed
if [ ! -d $2 ]; then
    mkdir $2
fi
# Install the database
mysql -u root -p < create_wordpress_database_and_user.sql
# Checking out stable version
cd $2
svn co http://core.svn.wordpress.org/tags/$1/ .
share|improve this answer

I have been using git clone as a sort of poor mans bash.

The WordPress git is updated every 30 minutes so I clone it into my own repo with my own plugins/themes or just pull directly from it.

The whole thing is pretty fast, in fact it is only about 2 lines, and the only thing I have to do manually is create the local DB and edit the config.php. It can be a bit tricky making sure you update WordPress to the latest version if you want to do it every 30minutes, but I typically only use the stable version, and keep the dev version in another environment.

It looks like this:

mkdir wordpress-project
git clone ..url-to-my-wordpress-base 

The other downside is that it is a bit hard to get plugins from the actual WordPress repo through git, it is possible to do it, using the git svn command but I find it's not easy to work with, yet.

share|improve this answer

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.