February 15, 2009

Google Sitemaps on WordPress-MU

I was looking into getting Google Sitemaps running today, and didn’t find much in the way of WordPress-MU compatible sitemap plugins. The only article I found was on a website that wasn’t responding, and looking at its Google Cache, it was a bit dated.

All of the plugins I could find seem to put the sitmap.xml file in the WordPress install directory. The problem with that is that the directory isn’t apache writeable, which means you have to touch and change the permissions of the files manually. Also with WordPress-MU, there may be more than one blog in use for that installation, so you can’t serve these multiple blogs’ sitemaps from a single location.

I took a few of the cached article’s ideas and made them easier to do. This guide will work on WordPress-MU 2.7 (the latest release).

First install the Google XML Sitemaps Generator plugin.

Open up the sitemap-core.php file in the plugin’s folder, and make the following changes:

In the function “GetXmlUrl”, line 1351, change to:

1351
1352
1353
1354
1355
1356
1357
1358
function GetXmlUrl($forceAuto=false) {
    if(!$forceAuto && $this->GetOption("b_location_mode")=="manual") {
        return $this->GetOption("b_fileurl_manual");
    } else {
        return trailingslashit(get_bloginfo('siteurl')) . 'files/' .
            $this->GetOption("b_filename");
    }
}

and in the GetXmlPath function, line 1382, change to:

1382
1383
1384
1385
1386
1387
1388
1389
function GetXmlPath($forceAuto=false) {
    if(!$forceAuto && $this->GetOption("b_location_mode")=="manual") {
        return $this->GetOption("b_filename_manual");
    } else {
        wp_mkdir_p(ABSPATH . UPLOADS);
        return ABSPATH . UPLOADS  . $this->GetOption("b_filename");
    }
}

This will make the sitemap builder create the files in the current site’s uploads directory, and point the filename located in the virtual robots.txt file to the site’s files url. e.g. http://www.webtatic.com/blog/files/sitemap.xml

This will mean that the sitemap files will be stored on a per blog basis, inside the blog’s uploads folder, which is set to apache writeable on the initial WordPress installation.

That’s all there is to it. You can now rebuild the sitemap, or let it rebuild automatically when you submit new posts.

Leave a Reply