When a client wanted to understand why the agency I work chose Craft CMS as a solution versus WordPress, I wrote the following brief explanation.
Craft is a better solution for custom websites
WordPress has provided a lot of functionality in its software to help someone set up and run a blog in a short amount of time. This is great for the person or company that wants to run a blog, but it creates more of a challenge for building a custom website. To build a custom site, a developer must work around and disable some of the features of WordPress to meet the needs of the custom site.
Craft has an opposite approach. It is a very simple software that you build upon to access the powerful functionality that is baked in. It is much easier to start building a custom site using Craft because you do not manipulate the software first. This leads to quicker development which saves the client money.
WordPress is not a true CMS out of the box
WordPress was first developed as a blogging software not a CMS. WordPress focuses on functionality that powers a blog with simple supporting pages without structured content. WordPress can only be made into a true CMS with the use of plugins, most of which come from various third parties.
Craft is a robust CMS out-of-the-box. It is less reliant on third-party plugins to create custom sites. It is a much better option for creating all of the different content types required to create a site that meets a client’s business needs.
Security, software updates, and higher cost of maintenance
Because of WordPress’s popularity, it is more of a target for hackers. I have had several WordPress sites hacked in the past. One strategy that helps make WordPress sites less vulnerable is to vigilantly apply software updates because many of these updates address security vulnerabilities.
WordPress software updates can break third-party plugins which can affect site functionality of sites that rely on those plugins for site customization. The use of plugins makes a site dependent on the plugin developer updating his or her plugin in a timely manner when WordPress updates might break the plugin. Not all plugins have active development.
Craft sites tend to be less dependent on third-party plugins so there is less chance of compromising site functionality when Craft needs to be updated. The only plugin I have used in Craft consistently is a custom plugin that dboy (the agency I work for) developed to integrate job search functionality. We continue to develop and enhance that plugin so we know that it will continue to function and be updated as needed.
All this is to say that the maintenance cost over time tends to be a lot less for a Craft website than for one powered by WordPress.
Simpler, more user-friendly interface
Craft has a simpler interface that makes it more user friendly for the client. It can do things as a CMS interface that WordPress cannot. For example, multiple tabs can be used to organize different sections of a page. The Craft interface can be customized and streamlined to allow the client to focus solely on creating and maintaining site content.
Advantage for integrating third-party APIs
One advantage of using Craft versus WordPress is that the architecture of the Craft software better serves the needs of integrating third-party APIs. We can build and reuse plugins that will save on future development costs.
Software that takes better advantage of current web technology
Craft is a newer product that takes advantage of current Web technologies in a way that WordPress cannot. The core of WordPress was built more than a decade ago, and much of that core functionality is still in the software today.
Better client-serving functionality out of the box
One great client-serving feature of Craft is the matrix field. We relied on this field type for a locations entry on a custom site. The client can control and change the order of those locations, adding as many or few as needed. Because all of the data is already defined, developers can control the markup so that those fields display consistently and will not break the design.
Today I was tasked to create two new templates for a career website that had recently launched. The client wanted to have the ability to create new pages instead of having to come back to dboy (the agency I contract for) to create the new pages. This is not an unusual scenario in the client services world. But it was unusual for the typical clients that I build websites for contracting for dboy.
The site was built in Craft CMS. I started using Craft earlier this year. It is my favorite of the CMS solutions that I have used (WordPress, Drupal, and ExpressionEngine being the others).
If It Were WordPress
If I was building this site in WordPress, this problem would have been pretty easy for me to solve. I would have created a specific template matching the layout of other pages on the site. Then I would have given instructions for the client that when they created a new page, to select this custom template from a select dropdown menu in the WordPress admin.
But Craft Works Differently
But as I looked to tackle this problem in Craft, there is not a similar solution. Craft has different ways of creating “pages” with Section types. Normally when creating one off pages, I would use the Single page type. I have used the Channel type for things like blog entries or events. And I am currently using the Structure type on this client site for an About section that contains 6 subpages.
It was not immediately apparent to me how to solve my problem. Channel types did not seem to fit what I needed (I had wrongly assumed that that url structure would be something like channel/page-title). And I did not need a specific order so Structure did not seem to fit. That left me with only Single pages as a possible solution. Because of the way Single pages are created, this solution would make it more difficult for the client to create new pages. (I like simple bulletproof solutions to make it as easy as possible for the client to create a new page).
For this solution to work, the client would have to define the fields that displayed in the CMS content entry page. It would have only been one field, a body field which is a Rich Text field. And then the client would have to follow my instructions to assign the correct template to the new page they created. They would have to type in the name of the template into a field in the CMS, not choose it from a dropdown like in WordPress.
Not a Bulletproof Solution
I was not crazy about this solution but it seemed to be the only way that I saw to solve my problem. There were too many places that if the client did not follow my instructions, they would run into problems creating the page themselves. This would just frustrate them and they would have to seek out help from dboy.
The best solutions are the ones that reduce the chances of error by the person using the software. There were too many potential places for error in the solution I had come up with. But I really did not see another way to solve the problem I was tasked.
So I created a test page, template, and added some styles that they might need to the stylesheet. As I began testing, I realized that the client would not be able to create a new Section type of Single. I had set up user privileges on the site so that the client would not have access to admin settings. In Craft, you can only create a new “Single” page with access to admin settings.
So now I was faced with a new dilemma. The only way to make my solution work was to give the client admin privileges. That creates a whole new set of problems and gives more opportunity for the client to “break” the site.
A Different Direction
I knew that I did not want to change the user privileges on the site so that caused me to explore a different solution. One of my early ideas was to use the Channel section type to create a Client Created Pages channel that they could add new entries to. As I have already mentioned, I had wrongly assumed that doing it that way would create another level in the url like example.com/channel/their-new-page.
I decided to create a new channel and low and behold, I could set the url structure to just be the new entry. This solution would be ideal for the client because I could set up the channel pages to use the template I had created and I set up how the entry form in the CMS looked. All they would have to do is create the new page and add the content. So much simplier and bulletproof.
Making It Even Better
When I was first assigned the problem, I was asked to create two different layouts for larger tablets and desktop, a full-width layout and a two-column layout that had a news and events module in the secondary column. Earlier in the day I had learned about the “lightswitch” field in Craft. It gives you a simple toggle input for a simple yes or no. I decided to use the field so that the client could “turn on” the two-column layout.
I then created a template with a conditional to see if the lightswitch field was true. If it was, I outputted the code for the two column layout. If not, the page got the full-width layout.
But One More Thing
The client also wanted the ability to add these new pages to a navigation menu in the footer. We already had one page on the site that was not part of the main navigation that only linked in the footer. My solution was to use the plugin Craft Menus by Familiar Studios. The client can create add their new pages to the menu and order them however they choose. I just added the two pages I already had in a secondary navigation. The plugin is easy to use and allow page links to be created by getting a list of pages in a popup and choosing it from the list.