My first experience with WordPress was several years ago, in its 2.0 days, before it could legitimately be thought of as a content management system and was no more than a blogging platform. It was great for blogging or small sites, but if you wanted more than a few pages of static content and a blog post manager, you were either building complex codebases on top of WordPress, hacking the core to make it work, and / or you were using a different platform.
So, I developed websites with Drupal. In many ways it delivered everything you would need to create the complex sites that weren’t possible with WordPress. Now I was able to create multiple content types and webforms, strictly control navigation, declare input fields in the admin section, and have a powerful search function. All of this was not without its costs, however. Modules would often break the sites, depending on their version; the structure of the database made certain tasks very slow; for smaller sites it was just too bulky to justify working with it, and for the non-technical editor / user it was difficult to get around.
After the 3.0 update of WordPress, it is now a full-fledged CMS, and now there are only a few things that most businesses would want that aren’t possible with WordPress. Finally, there is the best of all worlds. A user-friendly administration, an advanced API (application programming interface), and it can handle a very small portfolio site or a site that has millions of pages and visitors. However, switching back to WordPress, there was built-in functionality that I was missing from my days of developing with Drupal. With a little customization and the help of some plugins, however, the most beneficial functionality can be attained.
1. Not a plugin, but make sure your theme supports all of the best functionality
The first way to take full advantage of WordPress is not by installing a plugin, but to set up your theme to use the more powerful features of the latest versions of WordPress.
The default functionality of WordPress is to list all pages in the main navigation of the site. Sometimes this is just fine. Most times, however, you’ll want finer control over the main navigation. Using multiple custom menus and displaying them in your site requires using the register_nav_menus() function to declare the IDs of the menu in your functions.php file, then displaying the menu in your theme with wp nav menu(). If you are not familiar with editing your theme files, make sure the theme you choose, or the developer you’re working with is implementing custom menus. It will allow you to use the powerful built-in menu system found in the WordPress admin section under Dashboard > Appearance > Menus. There you can select pages, categories, or custom links to appear in the menu, and easily drag and drop items to their correct order and hierarchy.
One of the most glaring differences when looking at WordPress vs. Drupal was being able to create different content types through the Drupal admin section. If you don’t know what that means, imagine that you want your site to have and display recipes. These recipes will have many different fields of data such as: ingredients, directions, time to prepare, nutrition information, cuisine, ratings, and course type. If you were to create blog posts, or pages that created all that content in one field, there would be no way to search, sort or display by those specific fields. Because creating a content type is easy to do in the functions.php file of your theme, and you can set it and forget it, I haven’t tried any plugins that offer this. However, if you’re not comfortable editing your theme’s files, those plugins do exist. Be sure to look at the plugin’s rating, the version of WordPress it supports, and whether it seems to have a lot of open bug / issue reports in the plugin forum.
2. Advanced Custom Fields
This plugin goes hand in hand with custom content types. One of the main reasons you would be create a custom content type, is because you want a way to enter, display, and format a variety of different fields specific to that content type.This plugin allows you to do that.
ACF allows you to declare groups of fields, each containing a number of field types. For instance, you could create a field group called ‘Property Information,’ then within that field group define ‘Title’ as a text field, ‘Description’ as a WYSIWYG editor field (this allows the editor to use text formatting), ‘Year Built’ as a number field, ‘Printable Flyer’ as a file upload field, and ‘Image’ as an image upload field. If the website had a custom content type called ‘Property,’ you could now restrict the ‘Property Information’ field group to that content type. Now when an editor adds a new property, they can include all of the information that has been defined with ACF; you can even make fields required, so that a property is never created without a important field present.
Advanced Custom Fields has a robust API as well, making it possible to create your own field types, run validation checks on existing or custom field types before and after submission, or change user-submitted information. If you want to declare a new field type of ‘Price,’ to make sure that if a whole number was entered it was converted into two decimal points, it will always display the price with a dollar sign in front, and will also add three exclamation points if the price is greater than a thousand dollars, that is all possible using Advanced Custom Fields. In a future post I’ll go through the process of using some of these nerdier features.
3. Gravity Forms
Creating a webform from scratch is no simple task. It requires a large amount of code to display an html form to the user, validate the data before submission with client-side code, determine whether the submission is spam, submit the data to a server-side script, perform more validation and security checks, save the form entries to a database, redirect the user to a response page, then use a server’s mail function to send a notification to the administrator of the website and an auto-responder to the submitter of the form. If you blacked out reading that, you can appreciate the need to be able to create flexible, secure forms without worrying about those steps every time.
Gravity Forms is the type of plugin that I love. Like Advanced Custom Fields, it is easy enough for someone with no developer experience to use, while providing a well-documented API to take advantage of its internal workings. With Gravity Forms, a website editor can: create a form in the admin, select fields that a user should fill out, make certain fields required, set up email notifications, and define a response page or message to be displayed on submission. Gravity Forms extends the page editor with a button that allows the editor to insert the newly created form in any page with a few clicks. With Gravity Forms, a developer can…well, really, the sky is the limit. Again, in a future post, I’ll provide some examples of some of the cooler things we’ve accomplished with the plugin.
Another one of the things Drupal does well, is relevant searching. Instead of indiscriminately searching words in a page or post, Drupal will assign weights to different parts of the content. For example the title and tags should probably be weighted heavier than the body content, and words enclosed in <strong>tags</strong> should be weighted heavier than normal words. Using a complicated (read: I’m not going to try to break it down in this post) function, the occurrence of words and their weights are saved to the database, so that each search doesn’t have to run through that function, which would slow down or halt the website completely. With Drupal, a cron job (automated task) is run on the server at a set interval, which completes the search indexing among other things.
The best WordPress plugin to implement this important search feature is Relevanssi. By enabling the plugin and running the initial index, your WordPress searches will now be much more relevant. Like most of the plugins I would recommend, that is far from the end of it. With some customization, you can restrict search by content type, sort search results by url query variables, order results by custom field data, and much more. Relevanssi has the added benefit of reindexing content when it is updated, or adding content to the index the moment it is added, so you do not have to wait for a scheduled task to run for the site to be re-indexed, nor do you have to be a server admin to set up cron jobs, since WordPress’ cron runs on demand.
5. WordPress SEO by Yoast
WordPress is set up to be good for SEO. URLs are search-engine friendly and hierarchy-based. Page titles are included in the <head>, tags link to relevant sections of the website, etc. However, it doesn’t automatically do all the things you could be doing to vastly improve the SEO power of your website. This plugin adds a section on all posts and pages that includes a snippet preview (how that page may look in search engines.) It allows you to tweak the title of the page to be different than the page title, in case that is a place where you can include targeted keywords. It allows you to specify a meta description and keywords as well. In addition, it provides an on-page tool to specify what keyword you are targeting and tests whether you are using that keyword in the heading, page title, url, content, and/or description. If the keyword you are targeting isn’t in those key elements, you now know you may need to refocus some energy on including it there.