I’m in the process of re-working my wife’s quilting website. (It’s so pathetic right now that I’m ashamed to link to it.) I originally hand-rolled some PHP and CSS for her. It got the job done, sort of, but I’ve never been very happy with it. After using WordPress here, I got the idea that it would do a much better job than my own pitiful code. So here’s how I set up WP as a content management system (rather than a blog server) for my wife’s site. This is my third WP install, and I’ve learned a few things from the first two iterations. I even managed to document my second installation which has been helpful this time, so I’m documenting even more thoroughly this time around.
As usual, start with the installation instructions. Download the software and uncompress it on your webserver. This will create a
wordpress subdirectory, so by default your URL’s will look like this:
http://my.domain.name/mydir/wordpress/. For this installation I don’t want any extra directory elements in the URL —
http://my.domain.name/index.php should go straight to the CMS. So I moved all the files out of the
wordpress directory into the web server’s root directory after uncompressing them.
I already have a shared database set up for my other two sites, so I didn’t need to do anything for that step. I just copied over one of my existing
wp-config.php files and changed the
Once the software was loaded and configured, I ran
wp-admin/install.php from my browser and filled in the requested information. I logged in and updated the Options panel as appropriate. Some things I wanted to double-check:
- Uploads disabled–I’m going to manage uploads with
rsync, so I don’t want or need WP’s upload feature.
- Permalinks–I want short permalinks that don’t need to be encoded, to make it as simple as possible for my wife’s customers to pass along URL’s. I used
/art/%post_id%for the permalink structure and
/catfor the category base. I’m going to make some manual changes to
.htaccess(see below), and I don’t want them to get clobbered accidentally, so I’m leaving
.htaccessread-only to the webserver. I learned the hard way that this means I’ll need to update the file manually whenever I add a Page to the site.
I’m setting up the site such that somebody browsing
http://my.wifes.domain/ will be taken to a splash page. (This is where the hand-rolled work on
.htaccess comes in —
RedirectMatch ^/$ /splash, for example.) This gives a broad overview of the site (i.e. answers the “Is this the page I’m looking for?” question) and leads users to the Help page. The Help page tells the reader where important stuff is located on the page, a little bit about how WordPress works, syndication, and other “bloggy” things. At this point, the user should know that they’re in the right spot and how to use the site. From there, they’re directed to
http://my.wifes.domain/index.php, the main page.
For this site, I wanted a fluid (full browser width) theme that would appeal to quilters, the vast majority of whom are women. I settled on Dixie Belle. I’ve had to tweak some things, mostly on the sidebar (rearranging with high-frequency links at top, dropping some non-essential stuff) and the top navbar (which was hard-coded for the theme competition). Once I’m satisfied with my modifications I’ll probably publish the revised theme on this site.
Next came some plugins:
- WP-ContactForm to use in lieu of
mailto:links. This allows us to put a contact form on any post or Page, just by clicking on a quick-tag. Sweet!
- Spam Karma 2, an awesome tool to block comment spam. Recent downloads already include the
- Google Sitemaps is installed. I’ll activate and configure it once I’ve got everything else set up and I have some content.
- My very own shoehorn “plugin”, which I’m using to insert StatCounter code in the footer of every page.
- TextControl for markup. This plugin includes Markdown, but it’s superior to the markdown plugin that’s bundled with WordPress because you can override the markup syntax on a per-page basis.
- I tried to use Spelling Checker (the one that uses
aspell, which my web hosting company supports). But
aspellkept core dumping on me, so I used the AJAX spell checker instead. It has some minor issues, but it works.
- HeadMeta, which I’ll be using for per-post geotags for things like quilt shows, mail-order and retail stores, as well as other posts/Pages that can reasonably be geotagged. I’ve already made sure that the Dixie Belle theme is activating the WP header hooks — Jennifer seems like the type that would have done the Right Thing, and she did!
After the plugins were installed, I got down to some customization of Dixie Belle’s header and sidebar. My goal is to strip every non-essential link or bit of text from the header and sidebar. The top navbar now consists of 4 one-word links — About, Contact, Home, Help. I didn’t want the sidebar to list all the posts’ categories, nor did I want to list all the links in the database on the sidebar. I also didn’t want Categories to show up in one section of the sidebar, with Links in another section. So I removed the
list_cats() code from the sidebar, and I modified the code that generates the list of links such that only one category of links (“front_page”) is shown. Then I inserted serveral items in this category, either linking to Pages written for the site or pointing to those few Categories which I wanted to highlight on the sidebar. I gave the Meta section a similar paring down by replacing all the feed-related links with a single link to a syndication Page. I also removed a few other items from this section, and now the sidebar contains only the search tool, a Links section with 7 (currently) items/descriptions, and the abbreviated Meta section: syndication, validate XHTML, and login. I’ll also be adding a CSS validation link later.
I’m pretty pleased with the new site. I’ve still got a little bit of work to do on two or three pages, then I (or my wife) have to start posting content on a regular basis. But I’m satisfied enough to go ahead an post a link to the new site. Check it out, and please post comments about the new site on this article!