By Jeff Cohan
nSiteful Web Builders, Inc.
Last Updated: December 8, 2023
Some of the best web projects I’ve ever undertaken have been collaborations with people I’d ordinarily consider competitors: fellow web designers and developers whose skillsets and interests complemented mine, and vice versa. I’d like to be involved in more such projects; hence this presentation.
We don’t (can’t) do everything.
Many of us who hang the shingle of web designer or web developer advertise bundles of services. We list among those services: marketing, branding, copywriting and copyediting, site maintenance, email marketing, search engine optimization, and so on.
As we evolve in our practices, however, both our personal interests and the natural arcs of our careers — the kinds of projects we’ve taken on, sometimes simply by the luck of the draw — lead us to specialize and seek work in some service areas more than others. Although we might leave the old shingles hanging, we’ve left by the wayside some of the skills and services advertised on them.
Successful collaborations depend on the right mix of skills and the right chemistry. My brief resume and bio may provide some clues as to what our chemistry might be, but I’m not foolish enough to think that that’s enough. What I can and will try to convey on the written page is a description of those aspects of web development that most float my boat, the things I’m “best at” and/or focus on the most. My hope is that some of you will do the same and that when we examine the Venn diagrams of our respective specialties, we’ll find opportunities to put our heads and efforts together so as to mutually benefit our clients and ourselves.
My Current Focus (What I Do Best)
I divide my focus areas as follows, in no particular order:
Custom Post Types (CPTs)
Once I started creating my own custom post types (together with custom fields and custom taxonomies), I started seeing — and implementing — use cases for them everywhere.
Brief Overview of Custom Post Types
Virtually everything that comprises a WordPress website is a post (small “p”) of some type. Out of the box, the two basic WordPress post types — Pages and Blog Posts (unfortunately and ambiguously named “Posts”) — are very similar. Yes, there are differences, but fundamentally they have titles, authors, and free-form content.
Whether you use a pagebuilder, the Gutenberg block editor, or the classic editor in either visual or text mode, you’re adding content into a free-form box. It’s the “free-form” nature of the WordPress editor that makes it great for home pages and lousy for other types of content.
Not every type of content should be a page or post.
Not every type of content lends itself to being a Page or a Blog Post, and this is where the custom post types (CPTs) come in. You know the examples that are most often put forth:
- movie or book reviews
- staff directories
- frequently asked questions
- and so on
In essence, almost any type of structured content that consists of multiple data elements (in the case of movie reviews, those could include genre, release date, studio, director, actors, and so on) and that should be displayed in a consistent format is a likely candidate for a custom post type.
You’re not going to want to create a separate page for every movie you review and to remember the sequence and styling of all data elements — and to then update the master listing of movies and the navigation menu every time you add a new movie. This is where custom post types and the WordPress template hierarchy come into play and shine.
Many CPT plugins were both too much and not enough.
In my early WordPress days I didn’t hesitate to use third-party plugins for such custom post types. But the programmer in me (I had built dynamic database-driven websites in php and MySQL for seven years prior to using WordPress) soon realized and was bothered by the fact that many such plugins were simultaneously too much and not enough. By including way more functionality than I or my clients would ever use, such plugins contributed to code bloat and, what’s worse, made it confusing and difficult for my clients to use them. At the same time, some of these custom post type plugins lacked some very basic features. (Why, for example, can’t I find an FAQ plugin that has a field for “Question Summary”?)
Here’s a compilation of my blog articles about custom post types.
My Process for Creating CPTs
I originally used GenerateWP to generate the code for registering custom post types and custom taxonomies. Once I’d developed a fairly extensive library of CPT code, however, I started using the highly sophisticated (sic) method of copy-paste-replace to clone one set of PHP functions to another set.
I place my code in the
The functions that register the CPT and taxonomies are saved in a file named in this format:
The functions that control the front-end display of the CPT are saved in a file named in this format:
I use ACF Pro for custom fields. This allows me to create simple, user-friendly forms that make it easy for my “civilian” clients to update their websites.
If I could build nothing but membership websites for the rest of my career, I would, and I’d be a happy camper!
There are many types of membership websites, but most fall into one or both of two general categories:
- Community Websites:
Membership is based on common preexisting affiliations (places of worship, homeowners’ associations, alumni associations, etc.). These sites offer features typical of social networks, where members can interact with each other (like on Facebook). Content and functionality is restricted to logged-in members.
- Content Restriction:
Membership is based on common interests in the content and functionality of the website itself. While social networking elements may exist within these membership sites, the primary goal of such sites is to restrict “premium” content to those who have obtained membership — whether they paid for it or not.
Over the years, I’ve developed many sites of both types.
My First Membership Website Project: A Collaboration with a Colleague
The first was a hybrid (WordPress/custom) membership site for the Union Lawyers Alliance (“ULA”) of the AFL-CIO — a site I started building ten years ago in collaboration with a web designer I met on LinkedIn. It was exactly the kind of project I talked about at the beginning of this presentation and that’s a model for partnerships I continue to seek. My partner in that project, Tom, who worked and lived where the ULA was headquartered, had been invited to respond to an RFP to consolidate the ULA’s two legacy websites into one using WordPress. Tom was a WordPress designer in search of a developer. Long story short, our skillsets were nicely complementary, our chemistry was sympatico, and our joint RFP response won the contract.
WordPress Membership Plugins I’ve Worked With
Since then, I’ve used these WordPress membership plugins: s2Member, WishList Member, Ultimate Member, Directories Pro, GeoDirectory, Members, and MemberPress.
Nowadays, my go-to solution for membership websites that focus on content restriction is MemberPress. It is robust, comprehensive, and intuitive. Technical support is excellent. And the options for monetizing membership sites with MemberPress are virtually limitless. One of the most promising use cases for membership sites is the ability to offer online courses — for which I use MemberPress with its Courses add-on.
Go here for a compilation of my blog articles about membership websites.
Forms, and particularly advanced forms, have been a specialty of mine for some time. Before my WordPress days, I built all my forms in php and MySQL. Nowadays, in WordPress sites, I primarily use Gravity Forms, although I’ll still create custom forms in php when appropriate.
Forms are the engine that drive user interactivity on the web. We see them everywhere — they are the meat of eCommerce websites and online surveys, and simple versions of forms are common on “Contact Us” pages.
Some forms are easy to make, using basic HTML, online form builders, or plugins for platforms like WordPress. But there are other applications for Web forms — including some applications for which you might not initially think a form is the answer — that require a custom solution with custom programming.
For WordPress websites, I have been using Gravity Forms since 2013. The extensions that come with my Gravity Forms developer license and my Gravity Perks and GravityView licenses make it possible to accomplish almost anything in the area of form processing. Sometimes, however, the requirements for a particular form — even within a WordPress website — are better addressed with custom code. In cases like this, I seamlessly integrate custom forms into a WordPress template.
Go here for a compilation of my blog articles about web forms.
I became smitten with CSS when I discovered the CSS Zen Garden project in May of 2008. Holy cow! As someone whose first web page layout system (circa 1994) was HTML tables, I was blown away by the capabilities and promise of CSS. The evolution of web browsers and the CSS specification has only deepened my respect for the technology and humbled me in my quest to master it.
Even as WordPress page builders and the maturing of Gutenberg have made it possible to create stunning stuff, the need to understand CSS and write effective CSS markup is greater than ever. In my experience, “civilian” website owners and even some WordPress designers don’t know enough or care to know enough about CSS to solve problems they thought those WYSIWYG element setting controls would avoid.
Setting responsive breakpoints according to common desktop/tablet/phone footprints — which is how many themes, page builders, and block plugins address the responsiveness issue — is so 2012. Media query breakpoints should be based on the actual content and not on arbitrary device size assumptions. Doing responsive design correctly requires informed trial and error assisted by the latest browser developer tools.
So, despite my initial fears that page builders and Gutenberg would put people like me out of work (hyperbole, yes), the reality has been quite the opposite. A large segment of WordPress website owners still prefer the classic editor — which, after all, looks and acts like a word processor — and leave it to their web designers and developers to dress things up using their knowledge of HTML and CSS.
Go here for a compilation of my blog articles about CSS.
Selecting and implementing third-party plugins — even free ones — isn’t as simple a matter as it may seem.
The sheer volume of available plugins makes the selection process daunting. Then, one must consider real and potential plugin conflicts, frequency of updates, responsiveness to support requests, and the number and quality of the other plugins the authors have developed and maintain. These are factors I pay attention to constantly.
Knowing about and being able to detect plugin conflicts is one thing; integrating plugins with other plugins and systems is another thing. There’s just no substitute for extensive testing and experimenting here. For example, membership sites pose unique challenges for integrating with email marketing systems.
Think about it: A good membership system needs to communicate with an email marketing system so that website members’ statuses (e.g., pending, subscribed, expired), are automatically updated in the email marketing system. (After all, you don’t want to send renewal solicitations to active members or thank-you notes to expired ones.) There are lots of good email marketing systems. MailChimp is one of them, but it’s not necessarily “the best” on all dimensions. However, I’ve standardized on using MailChimp with MemberPress because of how reliably they integrate with each other.
In the case of many of my favorite free plugins, I’ve upgraded to the paid version of them, and, with very few exceptions, I let my clients use my licensed versions. This saves my clients time and money.
All said, sixteen-plus years of evaluating, configuring, and using WordPress plugins of all types should make me better than the average bear in this department.
Thanks for listening. If you think we might be a good fit for collaborating on a website project for one or more of your clients or prospects, let’s get the ball rolling.