Justine Larbalestier, 2013

Justine Larbalestier 2014

Justine still loved the 2008 version of her site, but wanted to refresh and update it a little. We decided to keep the background, which had become a signature look for her, and give the main content more contrast. We rethought the navigation entirely and replaced some of the old-school blog features with a Twitter sidebar.

Showcasing both the US and Australian editions of Justine’s books is important to her, but it had always required extra work for both of us, creating two versions of the featured image for each book (one with the US cover in front, one with the Australian) and randomizing which one appeared. I took the opportunity to automate this process in the new theme. Now, Justine simply uploads each cover and checks a box for its country (using a custom taxonomy). The covers are still displayed stacked one atop the other, but this is now handled in CSS instead of Photoshop. The three books at the top of the site are the three most recent, but the plugin randomly chooses whether to display the US or Australian cover. This same custom plugin also builds the cover gallery for her press kit and displays foreign edition cover galleries on each book’s page.

Texas A&M University at Qatar conference network

I had worked with Texas A&M University at Qatar before to set up last-minute sites for events. We agreed that this was not the ideal process, and they set aside some time for me to create a better solution.

We set up a new multisite network and created a sample site with the basic content outline every event would need: a schedule, travel and lodging information, a sponsors page, and information on how to register for the event. Then we set up the Blog Copier plugin so that new sites could be deployed using this base outline with a couple of clicks.

The network has all the Genesis child themes available, plus Design Palette Pro and Web Fonts to let the conference organizers customize their designs. The network also includes the Genesis Extender plugin to allow the network administrators to add per-site customizations using Genesis’s hooks. The site also includes the Soliloquy plugin for gorgeous, responsive photo slideshows that can be placed anywhere on the site.

The conference organizers have the choice of using Events Calendar Pro, which is fantastic for big multi-day conferences, or simply entering a single day’s schedule in TablePress. Gravity Forms lets them add contact forms or even simple, no-fee registration forms. They can also use Event Calendar Pro’s various ticket sales add-ons (like EventBrite) or the very simple CampTix plugin if they are not using the university’s in-house event registration system.

The site includes speaker profile pages that can be linked to events. Session descriptions therefore include an automatically generated list of linked speakers’ bios, and speaker pages include links to that person’s sessions. In previous conference sites, these interconnections had to be maintained by hand.

Since placing sponsors’ logos on the site was a common problem, I created an option using Advanced Custom Fields. On this page, event planners can upload and arrange logos just as they would in the text of a page. They can then place the logos in the site footer, in a sidebar widget, or in a page using the custom [[sponsors]] shortcode.

I wrote extensive documentation for this site in WP Help, so that event planners have a complete guide to setting up their sites on the network. The network also includes WP101 video tutorials and a custom wayfinding Dashboard widget that walks the event planner through the site setup process. They wayfinding widget can be edited on a per-site basis to accommodate future changes to the network.

Like all of the Qatar campus’s sites, the conference network is hosted on WP Engine, which provides daily backups, automatic software upgrades, and guaranteed security and hack recovery.

Screenshot Gallery

FAZD: National Center for Foreign Animal and Zoonotic Disease Defense


FAZD, a part of Texas A&M’s AgriLife division, is a research center focusing on animal disease. In addition to the usual news and informational pages, the site needed to showcase the Center’s research projects, tools (the finished results of past research projects, like diagnostic tests or software packages), and the people involved in them. These used to be listed by hand on standard WordPress pages, but the group wanted a more interconnected site, with links added between projects and people automatically.

The content model for this site is more complex than most, involving three custom post types — research projects, tools, people — each with a set of custom fields. People are connected to their research projects and tools via the Posts 2 Posts plugin.

There are several custom taxonomies shared across the post types, including topics, diseases, and institutions. Institutions partnering with FAZD on a research project are added to the project when a user tags them in the Edit Project screen.

The institutions taxonomy is also used for People, to indicate which one a person works for. An individual’s bio page shows their connected institutions as well as a list of the research projects they’re working on. The staff directory lists the people associated with FAZD using custom fields for the contact information.


The design is very closely based on the Genesis Education theme. It was so close to the ideal site described and sketched in our kickoff meeting that we used it almost as-is, aside from gutting the archive templates to handle the site’s complex post types and taxonomy system.

PressBooks Importers


The crew at PressBooks asked me to customize the standard WordPress importer to behave a little differently: instead of immediately publishing the stuff from the old blog, they wanted to put the imported content into a queue and let the user select where it should go: their book’s front matter, the main chapters, or the back matter (which PressBooks has set up as custom post types). The tricky part here was adding a new bulk action — custom bulk actions aren’t supported in WordPress!

Texas A&M University Writing Center


When I was hired in 2007, the Writing Center had a complex site built in Mambo. It that hadn’t been updated in a while. Only the director felt comfortable adding anything, and we had forty-odd enthusiastic students who could contribute — if only they knew how. I updated the to the latest version of Joomla, but the community was splintering again, and some of the plugins we relied on hadn’t been updated. It also just didn’t do things that I expected of a CMS. Its blogging module didn’t support comments. I found another plugin that would add a commenting feature, but it didn’t integrate with the admin interface; you had to type a (non-memorable) code into the text in order to turn on commenting. The search feature was abysmal. The podcast feeds were actually created in a desktop application and uploaded to the server outside of Joomla, which didn’t support enclosures or multiple feeds. Some of those features were added in later versions of Joomla, but at the time, the lack of solid leadership in the developer community didn’t make me optimistic about Joomla’s future.

The Drupal Detour

When we started thinking about replacing Joomla, an event calendar was a major requirement. I chose Drupal, having used it on and off since 2004. I knew it was a beast, but I also knew the calendar module was great. Alas, everything else was a mess. The URL rewrite module didn’t work as advertised. The plugins required to put together a rich text editor with image upload features — something comparable to the one that’s built into WordPress — would not play well together, and I couldn’t create an editing interface that our users would actually use. If your content contributors won’t use the CMS, it’s game over. Fortunately, in the seventeen months (!) since I’d started messing around with Drupal, the central campus web team rolled out a calendar system for everyone. Once the calendar requirement was removed from my list, I was able to ditch Drupal.

The WordPress Migration

I built the new site in WordPress, migrated content from both the Joomla and Drupal sites, redirected the old URLs to the new, modified a magazine theme, and wrote a custom widget to fill in the one feature requirement I couldn’t meet with WordPress or an existing plugin.

The new site was up and running in two weeks. I trained the staff in a single 90-minute session. It was glorious.

I later migrated our Gallery2 photo albums into WordPress, and released the import script I’d written as a plugin.

Structuring Content and Moving to Custom Post Types

The Writing Center site had a lot going on: a faculty blog, two podcasts, a semiannual newsletter, a news blog, video archives from an irregular workshop series, a collection of handouts for students organized into four general categories, and resources for faculty that included a bunch of informational pages and a detailed list of courses.

For the most part, fitting all this into WordPress’s posts vs. pages model wasn’t difficult. All the date-based stuff went into posts, and I used categories to make them look like separate blogs, with distinct category templates and category-specific RSS feeds. The faculty resources were more complicated. Most of them fit into a neat hierarchy, which made pages a logical choice, but that left me with the course catalog.

When I abandoned Drupal, I knew I was giving up the Content Creation Kit that would have allowed me to separate the list of courses from the other web content. I imported those into WordPress as posts, then used category templates to display them separately from the other blogs. I was just biding my time until WordPress 3.0 came out, with its new custom post type support.

I wrote the basic course content type plugin in an afternoon, then refined it over time with added features: extra custom fields, sortable columns, nicer icons in the admin menu. (This code also became the customĀ  post type example in my book, and you can download the updated code as a zip file.) To move things over from the old posts, I wrote a migration script that I later released as the Convert Post Types plugin. There was no easy way to convert taxonomy types, so I cheated: I edited their database entries manually. (There were only ten of them.)

Launching the Network

While I was working on the Writing Center site, I was also supporting a number of other offices related to Undergraduate Studies. I had most of them running WordPress, but they were all on separate installations. Merging them was a tricky process because some of them shared users, so a straight migration wasn’t possible. I’ve written about the experience.

Inventory: the Content Audit Plugin

When I moved the sites into WordPress, we used the classic content inventory spreadsheet to keep track of things. That was useful, since there were a lot of title and URL changes as we updated pages. However, for the second content inventory I did, after everything was in WordPress, a spreadsheet felt redundant. The post/page list screens contain most of the information on the spreadsheet: an ID number, the title, the URL, the publication date. But some of that information isn’t visible, and we still needed the ROT column and a place to write notes and assign updates to people.

Instead of copying everything into a spreadsheet, I wrote the Content Audit plugin. It uses WordPress’s custom taxonomies and fields to fill in the missing pieces. With the plugin, you can simply check a box to mark something as Outdated or Redundant — and since those labels work just like the built-in categories, they’re very flexible. You can replace them with labels that work for you. There’s a textbox for entering notes, and you can assign a content owner — other than the original author — by choosing a user from a dropdown.

We did our inventory right from the WordPress admin screens, and there was no need to refer to an external spreadsheet that was never up to date anyway.

Theme Framework

In 2011, I built a theme framework that would unify the Undergraduate Studies sites, including the Writing Center. I created a theme with two responsive layout options and six color schemes, all based on the University’s brand guidelines. These options would be available to any site on the Undergraduate Studies network. Then I created child themes for the individual sites that further customized the appearance. For Undergraduate Studies, that meant displaying a monthly feature on the home page. For the Writing Center, that spot was devoted to a photo slideshow followed by the latest news story. The Writing Center also needed the specialized templates for categories and custom post types to display their wider range of content.

The Writing Center is using a child theme of this framework today. The rest of the network never launched with it, as the department’s leadership changed hands the week I finished it, and I left the university altogether a few months later (for unrelated reasons).