Why I (Almost Always) Avoid Affiliate Programs

Affiliate program offerings from some WordPress-related businesses.

Affiliate program offerings from some WordPress-related businesses.

I’ve been meaning to write a post about affiliate programs for a while, but the message I received this morning through my website contact form really kicked me into gear on it.

Hello Friend, I noticed you are promoting Backup Buddy. I have a tool that does the same thing with double the commissions paid. If you are interested, I’ll send you a review copy upon request.

Eeewww. I’m going to change which product I recommend just because your payouts are bigger? Read Full Post »

WordPress Manual No Longer Missing

When I agreed to take on the job of technical reviewer for WordPress: The Missing Manual (too lazy to put in an affiliate link, but you can read about the project in my portfolio), part of the promised compensation was a copy of the book after it was published.

Photo of WordPress: The Missing Manual trade paper edition

The publication date came and went, and no book appeared in my mailbox. I was reminded of this fact when someone posted an interview with the book’s author, and was just about to ping my contact at O’Reilly when he emailed me to ask my opinion about another proposed WordPress book and I was able to get the problem sorted out. (As for the proposed book, it’s a potentially interesting idea, but still only an idea, and I wouldn’t be the one writing it, so I won’t comment further.)

WordPress Missing Manual Credits


The book itself arrived in the mail a few days later, with my name and bio in the credits. Of course, if I’d realized they were going to lay it out quite as they did, I would have left off the “rhymes with sketch” part, because it looks a bit odd coming after the description of what I did. To me, after so many years of using “rhymes with sketch” as a pronunciation guide for my name, it seems obvious that this phrase should be kept with my name, just as if it were “Jr,” but I suppose it wasn’t obvious to the typesetter.


It’s hardly a standard suffix, after all, though in this era of audio and video media, people like me have to provide such glosses in self-defense, or hear our names mangled and lose the possible marketing value of public mentions.

Anyway, I think it’s a solid book for those who are new to WordPress, whether they use WordPress.com or WordPress.org.  I enjoyed working on the project and appreciated the author’s willingness to listen to suggestions. I’ll  just have to think of a better way to format my mini-bio so I can avoid having my pedantic little toes curl next time I see my name in print.


Places You Don’t Expect to Find Your WordPress Consultant

Sallie Goetsch preparing to photograph solar panels.

A better title for the post might be “Places your WordPress consultant shouldn’t go when she is developing sciatica,” because I’m sure it didn’t help. Strictly speaking, carrying a heavy prosumer camera up a ladder has nothing to do with either WordPress or web development, but it has a lot to do with making sure the client gets the best possible website. Read Full Post »

How Long Does It Take to Get Good at WordPress?

MediaBistro class website header

During the final discussion section of my most recent MediaBistro WordPress class (October-November 2012), one of my students unintentionally asked me a trick question: “How long did it take you to get good at WordPress?”

My first thought, honestly, was “Wait–am I good at WordPress?” Then I realized that she probably didn’t mean Andrew Nacin good, and might even mean “How long did it take not to be a hopeless n00b?” So I asked her to define “good.”

“Enough to be happy with a site you created and others said it looked good.”

Okay, now here’s the difficult part.

First, those are actually two different standards. You and your clients will almost inevitably occupy different positions on the perfectionism spectrum. They might be satisfied well before you are, or you may encounter that blessedly rare client who is never satisfied. In general, I tend to want to build Cadillac websites even when clients are only asking (and paying) for Chevies, but I have had a few thoroughly nit-picking clients. (Clients, and of course the people who use their websites, are the main “others” whose opinion of the sites matters.)

Second, the first time I ever built a site with WordPress, I was happy just to have built it. The year was 2005 and WordPress was only on version 1.5. Prior to this version of WordPress, there were no pages, only posts. Themes with different templates for different types of content (index, single posts, categories, pages, etc.) had just been introduced.

It was not possible to build the kind of site that you can build with WordPress today. WordPress was still a blogging tool, not a proper content management system. To build even the predecessor of the kind of site that my student was talking about, the kind of site she wanted for herself, I actually had to wait for a few years.

It was 2007 when I first started to build actual websites with WordPress. That was the year that WordPress started out on its rapid growth curve: 2.1, 2.2, 2.3. Then WordPress 2.5 burst onto the scene in 2008, and things really started to get interesting. It was around then that I started moving away from building HTML sites.

I didn’t actually start breathing and sleeping WordPress until 2009, after joining (and then getting recruited to organize) the East Bay WordPress Meetup, but it really wasn’t a question of how long did it take to master WordPress theme design, but how long did it take WordPress to become a tool for building sophisticated websites.

If you start out knowing some CSS and HTML (and at the beginning I knew more HTML than CSS, having begun my web adventures in the very early days before CSS was even thought of, never mind PHP), it’s not hard to customize themes, and the invention of child themes combined with custom CSS plugins (I do find that aspect of Jetpack very handy, particularly for testing) saves you from having to reinvent the wheel.

If you don’t know anything about any of those things at all, and you want a custom site rather than an existing theme with a bit of tweaking, you’re going to have to spend a good number of months devoting yourself to learning some basic skills as well as the time you need to master the WordPress-specific material. If you devote several hours to it each day, you’ll get to be good at it quickly. If it’s only an hour here and there separated by weeks, you’re likely to struggle.

But at least you no longer have to wait for WordPress to catch up with your aspirations.

A Very Strange Problem

A week or so ago now (time gets away from me in the most appalling fashion) I was about to post something on my personal blog when I encountered an unexpected problem. I got an “Error establishing database connection” message. Say what?

This frequently means there’s something wrong in your wp-config.php file, or maybe your .htaccess file. The problem is, that site, and this one, are part of a WordPress Multisite installation, and there was nothing wrong with most of the other sites, including the top-level site, Rhymes with Sketch. And sub-sites in a Multisite installation don’t have their own wp-config.php or .htaccess files.

Like any sensible person, I asked Mika Epstein (better known as Ipstenu) and Ron and Andrea Rennick for advice. Ron told me to check the database tables for the affected site, so off I went into phpMyAdmin to take a look.

I couldn’t even see the tables in question. I got a big red error message saying that they were damaged and I would have to repair them. But there was nothing within phpMyAdmin that would let me repair them.

Feeling slightly panicked, I turned to Google. (By this time it was late enough in California and far past the Rennicks’ bedtime in Canada.) I learned that I needed to log into cPanel and go to the MySQL management page. The solution to my problem lay in something I’d never paid any attention to before:

MySQL database check and repair tool

When I checked the database, I found all kinds of errors, not just in the tables for the personal blog, but for one of the other sites. Clicking the “Repair DB” button fixed everything, though.

I did look at my error log, and found that there were memory problems and, well, enough other things to make it a very large log file. In my general state of overwhelm I deleted the log file rather than studying it, so I’m not sure quite what went wrong to trigger the problem.

Since it was a very strange problem, however, and not one I’d heard about before, I thought I should write something about it in case anyone else had this issue, either with Multisite or single installations.

What the heck is a lucky URL?

The folks over at AppSumo are having a contest, the prize for which is lifetime free hosting from WP Engine. I’ve had clients use WP Engine, and it seems to be pretty good. What distinguishes them from other managed WordPress hosting companies is the fact that you can actually get to your database.

I don’t have the same warm fuzzy feelings about WP Engine that I do about Page.ly, but would certainly recommend them to the right clients, and I wouldn’t turn down free hosting, though I somehow suspect they are not offering multisite hosting in this contest, so I couldn’t use it for my own sites.

Anyway, as part of the contest I am supposed to share my “lucky URL,” so I guess this is the place to do it: http://www.appsumo.com/~mp0cb/

Setting Up DNS and Email on Page.ly

Page.ly has changed more than its hosting panel lately: they have a new policy on e-mail, which is to say, they no longer provide email service to their clients. This makes things considerably more confusing for the non-technical, so I’m providing a tutorial for my MediaBistro students and anyone else interested on how to get things set up. Read Full Post »

Review: Teach Yourself Visually WordPress Second Edition by Janet Majure

Teach Yourself VISUALLY WordPress, 2nd Edition
By Janet Majure
Indianapolis: John Wiley & Sons, 2012
ISBN: 978-1-118-197-87-5

One of my graphic designer friends raved about the first edition of this book, and I can see why. “Visual” is not an understatement with this series: it includes almost more images than text, and in bright full color, too. The illustrations and well-laid-out text boxes are certainly one of the book’s great strengths. Though a few of the screenshots are too small to be read at the size they appear in print, most of the illustrations aid considerably in following the steps in each chapter. The “Tips” boxes that appear at the foot of many pages to answer frequently asked questions are also very helpful.

Chapter 1, “Introducing WordPress,” helps you decide between WordPress.com and self-hosted WordPress (commonly referred to as WordPress.org), explains some core WordPress terms like pages, posts, permalinks, and the dashboard, and provides tips on choosing strong passwords, specific blog topics, and good site names. Many of these are not WordPress-specific tips, but they are important considerations for people who want to build good blogs or websites.

Chapter 2 focuses on setting up a WordPress.com blog. If you already know you want to use self-hosted WordPress, you can skip this. If you’re looking for a book that can help you with your WordPress.com site, however, you’ll be glad to know that this one addresses WordPress.com in all but a few chapters.

Chapter 3 covers both manual and “one-click” (control-panel based) installation of WordPress on your web server, using Bluehost and Simple Scripts for its screenshots. (The process is essentially the same for other hosts using Fantastico or Softaculous.) There’s a troubleshooting section for common installation problems. Then you have an overview of the time and date section of the general settings, followed by a tour of the dashboard home screen, the admin bar, and the user profile page. There’s no mention at this stage of other settings, even privacy (it’s often a good idea to hide a site at such an embryonic stage from search engines). Instead, before moving on to any of those things (they are coming in Chapter 4), the author suggests changing themes.

Really? If you know ahead of time what theme you’re planning to use, fine, activate it. But if you have no idea, you could spend hours down the rabbit hole trying to decide and getting nothing at all done about setting your site up. The theme is one of the easiest things on your site to change, after all, unless you are using a theme that relies heavily on custom post types (an argument for creating those within a plugin). That section of Chapter 3 seems oddly out of place.

Chapter 4, “Know Your Administration Tools,” addresses the rest of the settings (reading, writing, discussion, privacy, and permalinks), though without mentioning the all-important Screen Options tab to control which modules appear on your Dashboard in the first place, and which metaboxes appear on other screens throughout the administrative interface.

Chapter 5, “Create Written Blog Content,” walks you through the creation of pages and posts, including using WordPress.com’s Writing Helper. Here at last we meet the Screen Options tab, without which many once-standard parts of the new post/edit post screen would be hidden from us. (If you’ve used WordPress in the past and suddenly can’t find the Excerpt, Author, Slug, Custom Fields, or something else you’re looking for, check the Screen Options.)

Chapter 5 also covers the Quick Edit feature and the too-often-overlooked Paste from Word button (illustrated on p. 100), QuickPress, PressThis, mobile apps for posting to WordPress, offline blogging clients like Windows Live Writer, and importing posts from Blogger. Credit for thoroughness.

Chapter 6, “Create Visual and Audio Content,” starts by asking the reader to think about file size, load times, and, well, good taste, when it comes to adding media, and then sensibly recommends editing, and particularly re-sizing, images before uploading them to WordPress.

Curiously, there’s no mention of the problem that WordPress has with embed codes in the discussion of embedding slideshows from PictoBuilder (a recommendation made primarily, I think, because the author hasn’t discussed plugins yet) or videos from YouTube. In case you haven’t faced this problem yet, if you switch from the HTML editor to the visual editor after pasting in an embed code, WordPress will try to “clean up” the code, with the result that the code won’t work anymore. Ooops.

Equally curiously, there’s no mention of the oEmbed function (http://codex.wordpress.org/Embeds), which allows you to simply copy the URL of a YouTube video (or a video from Vimeo, or a photo from Flickr, or, now, a tweet from Twitter) and paste it into the HTML editor on its own line. Presto, the video (or whatever) appears, sized exactly to fit your content area. A neat trick, first introduced in WordPress 2.9. It’s as if this part of the book has not been updated since the first edition.

Chapter 7 addresses widgets and plugins. Since WordPress.com users get access to a number of widgets that substitute for plugins, the first part of the chapter is relevant to them, too. The widget section treats adding, rearranging, removing, and reactivating widgets very thoroughly, including the use of text widgets and screen options for text widgets.

The plugin recommendations are a bit lackluster, or at any rate dated. Share and Follow is no longer in the WordPress Plugin Repository (a pity: I liked it and still use it on several sites). Sexy Bookmarks changed its name to Shareaholic. The most popular free backup solution these days is BackWPUp, which backs either (or both) your database and files up offsite to a variety of places, automatically, on a schedule you specify. Joost de Valk’s WordPress SEO plugin has pretty much eaten All in One SEO’s lunch.

Missing from the chapter are any instructions on deactivating and uninstalling plugins, which is a bit odd given that the widget section showed readers how to remove widgets. Nor is there any mention here of plugin conflicts and how to troubleshoot those.

Chapter 8 collects a number of not-precisely-related topics under the rubric “Make Your Content Appealing.” This starts out with checking your spelling, using sub-headings and bulleted lists to break up your text, making better use of your images, and dividing long posts with the <!–more–> tag. Then it moves on to categories and tags, and finally it concludes with creating custom menus.

Conceptually, I would class categories, tags, and menus all under “Organizing your content.” I would prioritize it above “Polishing your content,” which is what the first part of the chapter talks about. In fact, I would probably talk about creating categories and tags back when I started talking about creating posts, because it’s a pretty good idea to start coming up with categories before you start producing a lot of content, and not after. (Trust me. I’ve done it. I started blogging before blogs had categories, never mind tags. Adding them later was ugly.)

Also, although there is a brief mention in the “Menu” section of adding categories to a custom menu, there is no mention of this in the box on “Category Display” on page 168.

This chapter does demonstrate the Bulk Edit function, which is useful for adding categories or tags to groups of posts after the fact.

Chapter 9, “Build Traffic to Your Blog,” also seems to combine at least two different subjects. Most of the topics aren’t really about traffic—getting visitors to the site. Instead, they’re about engagement: things like comment policy, e-mail subscriptions, ratings, surveys and polls. It makes me wonder whether the publisher set a limit for the maximum number or minimum length of chapters.

The topics themselves are generally relevant and accurate. Though not everyone publishes an old-fashioned blogroll these days, the Links function in WordPress can be used for a number of things, since many people want to display related resources or links to other sites of their own. The section on creating a comment policy is particularly good. The recommendations for commenting on other people’s blogs are also sensible. The author covers comment moderation in great detail.

The section on RSS is slightly outdated. RSS icons no longer appear in browser address bars: you have to go hunting for them in the bookmarks section. Otherwise, however, the instructions are clear.

The book goes into considerable detail about how to embed a widget from Twitter, though it doesn’t provide comparable information about other social networks. I don’t myself like Twitter’s widgets and prefer to use WP plugins for Twitter feeds, but that’s a matter of taste; the instructions are accurate. And since Facebook changes the way it does things every other day, it might be hard to include instructions on how to include your Facebook fan page box, etc. Best just go to FB for those instructions.

The general SEO guidelines are adequate, if basic. One thing worth noting and not mentioned is that since WordPress 3.3, the problem with the /%postname%/ permalink structure has been fixed, and this is the permalink structure favored by Google’s Matt Cutts.

The section on polls and ratings uses PollDaddy, available on WordPress.com or through the Jetpack plugin, for its example.

Chapter 10 is called “Tweak Your Theme.” We haven’t heard more than a word or two about themes since the end of Chapter 3, when the author hurried us away from Twenty Eleven as fast as we can go. Now, however, she’s using Twenty Eleven for her screenshots to demonstrate custom headers, header text color, theme options, custom backgrounds, and so forth.

Post formats also make an appearance here, though, as there is no discussion of actually creating new templates for said post formats, they probably belong in Chapter 5, or would if Chapter 5 focused on posts and not on written content per se.

The overview of CSS provides a starting point for the total beginner. I’m not sure whether someone who is that much of a beginner should actually be messing about in the theme editor or attempting to create a new page template, but hey, as long as you have backups…

The final item in the chapter, “Add a Category RSS Feed Link,” is a useful thing to know how to do, but not a theme tweak. Your feed URLs are independent of your theme. The only thing that makes this part of your theme is putting the link in a widget, because when you change themes, all your widgets get moved to the “inactive” section.

Chapter 11, “Content Management,” leaves out about 300 pages. Where is the section on custom post types? On handling sites with hundreds of pages? On…oh, well. People who want to know those things will probably buy a different book. (Indeed, maybe I should shut up and write it.) Let’s look at what the chapter does cover.

User Levels and Capabilities

Up to this point, the book has assumed that there is one user, the site administrator. In many cases where WordPress is used as a CMS, there are multiple users, and most do not have administrator privileges, so the chapter begins with an overview of other user levels (editor, author, contributor, subscriber) and their corresponding capabilities.

Community Sites

For a simple community site, the author recommends using the P2 collaboration theme (http://wordpress.org/extend/themes/p2), which allows people to post from the front page in a Twitter-like interface. She does warn that this might get a bit chaotic to moderate if you don’t manage who is allowed to register as a member. P2 is available on WordPress.com as well as for self-hosted WordPress sites. The plugins WP Mingle (http://wordpress.org/extend/plugins/mingle/) and WP Symposium (http://wordpress.org/extend/plugins/wp-symposium/) get footnotes in a tips box, but without screenshots or instructions. Mingle hasn’t been updated since October 2011, while Symposium is more current, but I haven’t tried either and can’t speak to their ease of use.

The BuddyPress social networking plugin (http://buddypress.org) gets two whole pages. BuddyPress bills itself as a social network in a box, and it has phenomenal capabilities, but it’s pretty complex and by no means as user-friendly for your community members as, say, Facebook, even though it can do all the same things. How it works also depends on whether you have a single or Multi-site WordPress installation, and this book has yet to mention WordPress Multi-site. I’d recommend reading a BuddyPress book, studying the forums in detail, and maybe hiring a consultant unless you’re an experienced WordPress user with plenty of time for trial and error.

I’m not sure why the author picks Mingle Forum rather than bbPress for her example—perhaps because it coordinates with WP Mingle. (bbPress comes packaged with BuddyPress, but it is also available by itself.) The important thing to understand when installing any forum on your site is that it will require moderating.

The document management section on page 252 provides an extremely basic method for linking to uploaded files. It works, if that’s all you want to do. There are lots of WordPress plugins to help you with a more sophisticated level of document management. Try Docs to WordPress (http://wordpress.org/extend/plugins/docs-to-wordpress/), WP Filebase (http://wordpress.org/extend/plugins/wp-filebase/) or WP Document Revisions (http://wordpress.org/extend/plugins/wp-document-revisions/).

The section on “Use a static page as your home page” on p. 258 needs to come with a warning. If you have a magazine-style theme, or anything else that uses a home.php file with a special layout, and you select this option, you will lose your fancy home page. (You can get it back again by restoring the “Reading” settings to their original state.) Make sure to read any instructions that come with your theme about how to set up your home and blog index pages.

I’m not sure I would class sticky posts as part of CMS functions—I would think they’d belong back with “Make Your Content Appealing” in Chapter 8. Creating a portfolio, on the other hand, is a good topic, but the actual section focuses primarily on theme choice, rather than on portfolio content types or categories.

Is advertising a CMS topic or a traffic-related topic? In either case, the author covers the basics of the types of advertising, the difference between WordPress.com and self-hosted WordPress regarding advertising, PPC programs versus affiliate programs, and how to insert Google ads and Amazon affiliate links into your site.

The chapter concludes with another two pages on e-commerce. As I said, the book is missing about 300 pages. Setting up shopping carts, never mind things like SSL certificates, is a pretty tricky business, and it’s really beyond the scope of an introductory book.

The final chapter, “Maintain Your WordPress Blog,” provides useful general tips about backups but less detail than I would like. (All right, I’m slightly obsessed. Almost no one covers this subject in enough detail for me. I spent years writing a blog all about backup.) There is, interestingly, no mention of Automattic’s VaultPress service (http://vaultpress.com), which is dead simple to use, extremely comprehensive, and works with any hosting company. It’s also about $15/month at minimum, so you pay for that peace of mind.

The advice on cleaning up outdated drafts is good; even better would be a suggestion to clean up old post revisions. This requires a plugin or wading around in phpMyAdmin, but can save you a lot of space: we just cut a client’s database size in half by deleting old revisions.

I like the recommendation of the W3C Link Checker on p. 288, because I’ve run into some irritations with the Broken Link Checker plugin. (Sometimes it finds things again even after I’ve fixed them, and I’m not sure why.) And, of course, you can use the W3C tool if you have a WordPress.com blog.

I’m not sure I would put analytics tools under “Maintenance”—I would think that makes more sense under “Traffic”—but in any case the four pages on statistics provide a good overview of the subject.

The last two pages on troubleshooting are minimal, but good advice as far as they go. It might make more sense to put the section on “Get to know WordPress support options” right before this. There are some support options not mentioned, like local Meetup groups, the WordPress group on LinkedIn, and Twitter, where a lot of WordPress developers hang out. If you have really borked your site, one of those channels should lead you to paid help.

Overall, I would recommend this book to beginners, particularly those who are visual learners, and particularly those who want to set up a blog or to use WordPress.com. Though it doesn’t cover all the material in the same order I would, it covers everything you need to know to get started and provides a sense of some of the other things you can do with more experience. It ought to provide a few more “Kids, don’t try this at home” warnings and update a few details, but in essence it’s a good book for someone trying to find her way around the WordPress platform and learn something about blogging and website design at the same time.

How to Import Joomla Content Using the WP Importer Plugin

For my sins (I learned this phrase from my dissertation advisor back when I was in graduate school), I am on the board of the Bay Area Consultants Network. Actually, I love BACN and have missed possibly 5 meetings since I started going in July 2003; if you are a consultant, coach, or other solo professional in the San Francisco Bay Area, I recommend you check them out.

Anyway, we are in the process of converting our existing Joomla! website to WordPress, as who wouldn’t. This is partly to make it easier for people other than me to add and update content, and partly because I am the board geek and I think WordPress suits BACN’s needs better. The problem with the site right now isn’t so much Joomla as the fact that it’s very hard for people to find what they’re looking for. (Well, that and terrible SEO, which has something to do with the type of content we usually post and something to do with the not-at-all-search-engine-friendly-URLs.)

BACN Home Page January 2012 (Joomla! 1.5)

BACN Home Page January 2012 (Joomla! 1.5)

Joomla! 1.5 article manager

Then go into your WordPress install to your SoftWarp | WP Importer settings. (You will need an activation key, which you get by submitting your e-mail address. This did not work from my LAMP server. Apparently the program requires cURL. I set it up on a dev server here on WP Webhost instead.)

The problem for someone developing a new site is that we have content going back to 2002, and importing from Joomla! to WordPress is not common enough for the WordPress foundation to build its own importer. I had tested the Joomla 1.5 Importer a while back, and it worked fine, though it was a bit slow as it required you to import one category at a time. That plugin has only been tested up to WordPress 3.0.5, however, and not updated since January 2011. (Yes, it has taken us a long time to get going on this project. Non-profit. Volunteer. Committee. Need I say more?)

So I did a little searching to see whether there was anything more recent and came across a plugin called WP Importer from SoftWarp. This plugin is not in the WordPress Plugin Repository, I presume for the very good reason that it’s marketed with decidedly black hat overtones. (The copy and samples are hilarious, though.)

The plugin’s documentation assumes that you’re importing a CSV file, and also that you’re using it in conjunction with another of the developer’s plugins, so using it to import Joomla! databases took a bit of figuring out. Since I can’t be the only person on the planet who will ever need to do this, I figured I would document the process here.

First, go into phpMyAdmin and open your Joomla! databases. If you are used to WordPress databases, you will be amazed at how many tables there are in a Joomla! database. Possibly because these tables don’t remotely match up, you can’t use the WP Importer plugin to import a complete Joomla database. Instead, you need to locate the database with the content in it.

mos_content, the database table containing Joomla! 1.0 content

mos_content, the database table containing Joomla! 1.0 content

In Joomla! 1.0, this table is called mos_content. In Joomla! 1.5, it’s called jos_content. (I haven’t worked with more recent versions of Joomla!, so I don’t know whether they’ve changed the name, but I bet it’s still nnn_content.)

Export this table as an SQL file and save it to your computer.

Exporting the Joomla! 1.5 jos_content table as an SQL file

Exporting the Joomla! 1.5 jos_content table as an SQL file

Log into your WordPress installation and go to SoftWarp | WP Importer. If you have not done so already, you will need to activate the plugin. The plugin is free, but you need to provide a valid e-mail address to receive the activation key. This did not work on my LAMP server; something to do with the need for cURL, which is also required to make the plugin work. I set up a dev install here at WPWebhost instead, and it worked fine.

First you import the table. In this case, you need to select SQL as the format of the file.

Import table with WP Importer plugin

Step 1: Import Table

Once the table has been imported (which may take a while depending on the number of entries), you will be automatically transferred to the next screen. Here you get to drag the different database field tokens into the correct positions. This involves a little bit of guesswork if you don’t know Joomla! databases intimately, but it’s not that hard to figure out. The main thing to know in this case was that [[introtext]] had actually been used as the main body of the post on this site, with [[fulltext]] for additions on some pages, so both of those belonged in the “Post Body” field.

WP Importer post config screen

Mapping database field tags on the post config screen

For some reason, which Joomla! experts will probably know, no section or category name info was saved in this table, only the category ID numbers, which weren’t very helpful to me, so I just let everything come in as “Uncategorized” and updated it later.

Joomla! content imported as WordPress posts

Joomla! content imported as WordPress posts, manually categorized

WP Importer imports all content as posts. Eventually, most of  these items will be converted to custom post types based on the categories I assigned them, but I’m still building those out.

This doesn’t remove all the labor from the import process, but it’s certainly easier than copying and pasting, and it ought to work on any flavor of Joomla! database—and probably databases from any other content management system, as long as you can isolate the table with  the content in it.

How to Mobilize Your Genesis Theme in Less Than an Hour

I love the Genesis Theme Framework (not an affiliate link) by StudioPress. Sometimes I love to hate it, because I have to figure out how to do something in Genesis that I already know how to do in, say Twenty Eleven or any other “standard” WordPress theme, but it’s worth figuring out the idiosyncrasies. Using any framework means less labor for a designer: the creators of the framework are responsible for keeping it up to speed with WordPress updates and features. Genesis itself has some lovely built-in features, like SEO titles and per page/per post layout options. And there are all those nice child themes bundled up in the developer package to mine for elements of a new theme.

There’s just one little problem with the way that Genesis creates its home page layouts: widgets. A Genesis magazine layout is made up entirely of dynamic content, with the different areas populated by the Genesis Featured Page and Genesis Featured Post widgets. They are marvelously flexible things (and there’s even a Genesis Featured Widget Amplified plugin that displays custom post types and custom taxonomies), and once you’ve mastered adding widgetized areas to a home.php file, you can save yourself hours of coding custom loops by using them.

Here’s an example, using the Lifestyle Theme, from the client site that inspired me to write this post:

CBI Screenshot 11-3-2011

From the back end, the main content area looks like:

CBI Home Widgets

The sidebar and the footer are also full of widgets.

The Lifestyle theme is easy to set up and rearrange, and even more flexible thanks to the Dynamic Widgets plugin. Widgets are a great feature of WordPress and using them to build home page designs makes Genesis more user-friendly.

But it turns out that widgets don’t play nicely with mobile plugins, and therefore mobile plugins don’t like Genesis.

I hadn’t realized this at first, because I myself am a dumbphone user. I’d asked the client to check on the appearance of the site on a mobile device, but it turns out my main contact there didn’t have a smartphone either, so she had to ask a third person, and the response wasn’t entirely clear. Another visitor to the site actually asked “Why do I see a calendar?” Only when I borrowed my husband’s iPhone did I understand what this person had seen, and only after a lot of hunting around did I realize why.

This is what WP Mobile Detector was showing to those with iPhones (and iPads: it wasn’t making a distinction):


This is not the site’s home page: it’s the blog index. This was confusing enough for me to find; I can completely understand why the typically non-technical member of Congregation Beth Israel Connecticut might think it was an event calendar. (There is one of those on the site, but this is not it.)

I went looking at other mobile plugins. StudioPress mentions the Wapple Architect Mobile Plugin for WordPress on their FAQ page, but while that at least displays the regular site to iPads (which really don’t need any special design concessions), it still couldn’t recognize the home page content, though I was able to customize the menu. (It supposedly displays a sidebar and lets you choose widgets, but that feature did not work properly.)

I also looked at MobStac WordPress Mobile, which did both the best and worst jobs of displaying content comprehensively, since it completely ignored the category exclusion rules set up to keep the events listings and newsletters off the main blog page. And I tried WPtouch, but to configure that properly you need to spend a lot of time creating custom icons, and it still wouldn’t create the  home page I needed. I took a look at OnSwipe, but that says  in its FAQ that it doesn’t display widgets, so that wasn’t going to be of any use to me. I even started looking at premium plugins like PluginBuddy’s Mobile, but wasn’t convinced—and not authorized by the client to spend money, either.

Trolling around in the StudioPress support forums was not terribly satisfactory. There were a couple of recommendations (from the same person) for the pro version of WPtouch. And then, finally, a link to a tutorial from Smashing Magazine called “How to Use CSS3 Media Queries to Create a Mobile Version of Your Website.”

Now, CBI was not paying me to design a mobile theme, which is why I didn’t just develop one in the first place. (That, and I’m fairly new to responsive design: see the previous post.) They’re a non-profit on a tight budget, and if a free mobile plugin had worked, it would have been good enough for their purposes. Based on my experience with other sites, I assumed (very, very dangerous thing to do), that a mobile plugin  would work for them. It wouldn’t, and I’d promised them a mobile-ready site.

Besides, the instructions seemed so simple. I suggest you read the entire article, but here’s the short form for converting your old stylesheet for mobile devices.

  1. Save a copy of your style.css file as small-device.css. Remember to rename the file within the comments.
  2. Open the file in a text editor. Search for the word “float.” If it applies to a div, replace “left” or “right” with “none.”
  3. Look for a “width” property on those divs. Set it to “auto.”
  4. Set the base font size to 100% and convert the remaining font sizes to ems or %. You will probably want to increase font sizes, particularly in menus and search box. You could skip this step and still have something more usable than the plugins are giving you, though.
  5. Upload the small-device.css file to your child theme directory (in my case this was wp-content/themes/lifestyle)
  6. Open your functions.php file and add the following lines at the end:
     * Add mobile stylesheet
    function mobile_styles() { ?>
    	<link href="<?php bloginfo('stylesheet_directory');?>/small-device.css" media="only screen and (max-width: 480px), only screen and (max-device-width: 480px)" rel="stylesheet" type="text/css"/>
    <?php }

Doing this took me about an hour, including reading the tutorial and figuring out how to put the stylesheet link into the functions.php file. (That info comes from a StudioPress tutorial on adding a print stylesheet.) I spent another hour or so today mucking about with the menu and the header and the fonts. The site has a fairly long menu, and I didn’t like the way it looked stacked. I’m not completely happy with my current solution of dividing it into three columns, since the drop-down menus now also divide up that way, but I think it’s an improvement. I created a new, taller subnav background image and increased the menu font size and line height to make it easier to use. I also set the description display to “none” in order to have the site name displayed more readably. (I had tried to use a different header image, but couldn’t figure out how to override the custom header choice in the theme options.)

The result is not pixel-perfect, but every single element of the original home page is there and working, from the image slider to the featured video.

CBI Mobile 1

You can visit http://bethisraelwesthartford.org on any device with a screen 480 pixels or smaller to check it out for yourself.

Those of you who have more experience than I do with responsive design can doubtless make suggestions for improvement.

Meanwhile, anyone using a Genesis theme can quickly create a mobile-friendly version of the site. Given that, I would expect StudioPress to be able to release a spiffier version of this small-device.css file for each child theme, quite easily, at the next update, if not to start making all the new themes responsive out of the box. Unlike me, their designers know their themes, and their framework, backwards and forwards, and wouldn’t have to spend as much time tinkering while adjusting things.