For a while now, I’ve had two plugins in mind to start standardizing on some common elements that theme authors are using in the WordPress community. These two plugins are:
- A
[column]shortcode plugin that would work across all themes. - A portfolio plugin since this is becoming a popular feature in themes.
Currently, these two plugins are up for testing on my GitHub page.
Grid Columns plugin
The use of a [column] shortcode has become increasingly popular in the WordPress community. I don’t have any real data on how many users are using this shortcode though. Based on my experience thus far, it’s just another bullet-point for marketing purposes. I suppose we’ll find out once the plugin is officially launched, assuming theme developers start dropping column shortcodes from their themes and recommending the plugin.
There are three major problems with theme developers adding column shortcodes to their themes:
- There’s no need for 22 column shortcodes to handle what one shortcode will do. I see things like
[column_one_fourth],[column_two_fifths], and so on. That’s the entire reason shortcodes are allowed to have attributes. - Theme developers are performing some weird hacks to get around WordPress’ content filters. No idea why. I haven’t run into any issues with this at all in development.
- This absolutely does not belong in a theme. Users lose this functionality when they switch to a theme that doesn’t support their previous theme’s shortcodes, leaving bracketed words in their content.
Therefore, I’m officially opening beta testing of the Grid Columns plugin. The plugin is nearly finished, so I’d love to get as much feedback as possible before releasing it as a free plugin on the WordPress plugin repository.
Portfolio plugin
The number of users wanting a portfolio on their site is growing every day. More people are showcasing their work, whether it be Web design, videos, artwork, and/or many other talents. This demand has pushed theme developers to create custom post types to handle this within their themes.
The problem with custom post types in themes is that they are tied to the theme. A user’s content should never be tied to the presentation. This is Web Design/Dev 101 — separate content and presentation.
When you build a system for managing content, it should always go within a plugin.
With that in mind, I’m introducing my portfolio plugin. My hope is that it becomes the standard portfolio base for any theme developer who wants to integrate portfolios into their theme. The plugin is still in its infancy, so now is an extremely good time to get involved and share your feedback.
Some questions for you about portfolios:
- What standard fields should be included in a porfolio (referring to post meta)?
- What other features should be available out of the box with this plugin?
I welcome any and all feedback at this point. But, just as a preemptive note: this plugin is meant to provide a standard base for portfolios; it’s not meant to be 100 files of features.
I have some ideas about standardization on other post types and taxonomies as well. I’m just starting with the portfolio post type since it’s pretty common. Stay tuned to the blog for more on this in the future.
Help me test
The more feedback and testing that’s done, the faster I can get these things ready for public release on the WordPress plugin repository. I encourage everyone, even if you don’t know code, to get involved in the process. I’m slightly biased, but I think these two plugins will be pretty awesome when finished.
I really do hope the community get behind these. While I welcome how easy WordPress makes it to create your own content types, like you say, it really does become a pain when theme authors recreate the same incompatible functionality over and over again. You mention “ideas about standardization on other post types”. Could I therefore suggest two components I think might benefit from this approach, namely Testimonials and FAQs (Frequently Asked Questions). These seem to be fairly common use cases for custom post types.
I definitely welcome ideas about other post type plugins. I’ll make sure those two are on my list.
I don’t really understand the need for this type of plugin.
I don’t think you should use the WYSIWYG to create layout. But if you wanted the main content to be multi-column, why not use column-count CSS property?
as for portfolio, I think that’s a great idea. I agree with Emyr that there are a few of these that are very common in modern websites and it would be great to have a “default” plugin to use.
Column shortcodes seem to be popular, so I figured I’d write a plugin to at least handle the functionality in a more standardized fashion and try to get theme authors to keep it out of their themes. I can’t see myself ever really using it and wonder how useful it actually is in real-world applications.
As far as
column-countgoes, it doesn’t support what’s possible with this. With it, the columns are always equal. With the[column]shortcode you can can do a lot more. I’d definitely usecolumn-countfor text-only displays.http://lianamir.com/bibliography
Quite useful, especially for those of us just now getting around to learning anything about CSS.
That’s actually a really good example. Thanks for sharing.
Many of the sites I’ve build don’t have standardized sidebars on every (or any) page. The ability to create layout within the editor using grids and columns is a simple and creative way to present a varied bag of content, or section off a call to action.
I agree with @Liana, this is very useful.
Hi,
very nice! Now I absolutely have no excuses to don’t add support to this features in my next theme.
Just a question: Will you add bundle this features inside hybrid-core?
I definitely won’t be doing that. That’d be the opposite of what I’m trying to accomplish.
That’s great Justin!
I’m just starting a project on wich the “Grid Columns Plugins” is going to be very useful.
I’ll keep you posted about bugs and/or suggestion. How do you prefer we do that? Using comments here or using an Issue at github?
Thanks!
For bugs or enhancements, you can post over on GitHub. If you don’t have an account there, feel free to post here in the comments.
Sweet! I’ve tried quite the collection of portfolio themes, so I’ve got plenty of ideas for this plugin. I submitted a handful of tickets already.
On a related side-note, I’m curious what is the best practice to responsiveness in cases like these. Most modern portfolio themes are fully responsive, elegantly transitioning from grids to single column, large thumbnail layouts on smaller screens. I love this. So how would your plugin deal with this? There are many ways to achieve responsiveness in a theme. Would you be better off just trying to make it as easy as possible to let every site owner do some tweaking to make your plugin adapt to a given theme, or could you safely include responsiveness out of the box?
Design is outside the scope of the plugin. That’s theme territory. Theme authors can do whatever they want.
I’ve built portfolio plug-ins which are specific to industries (media, publication and client) as I had problems creating a generic portfolio is that it was too complex or too minimal for example:
Portfolio of books written – subject, type, ISBN, publish date and so on.
Media portfolio – hierarchical but a lot more complex as you may need to credit the team behind the work (stylist, grip, make up artist, director and more) , the reason for hierarchical you may want to split pages in sections to cover studio, location etc rather than introduce yet another taxonomy. Plus it’s easier for end users to understand hierarchical pages than taxonomies when creating these pages in my experience.
Folio of services – Probably the simplest all you need to do is credit the company and probably not hierarchical in most cases.
Sure a lot of the information could be included in the Content area but this is a CMS so if you want to add a search by MUA/Stylist/Director /subject and so on via custom taxonomy then it breaks the standard you want to introduce.
This is why it’s fiendishly difficult to create a portfolio plug-in because of the disparate industries and minimal overlap. Things like FAQ and Testimonials are easy in comparison.
Because of the perceived loss of data when transitioning themes I always put CPT and Taxonomies into a ‘core’ plug-in.
Hi Tod,
I’m not sure how to use the span parameter, or how it fits in. Can you elaborate on that part of the shortcode?
I meant Justin. My dyslexia saw you as Tod ..via TADlock
Hmm..no way to edit comment.
“Span” is the number of sections in the grid this particular column should be. For example, look at this shortcode:
This means this column spans 2/4 of the total grid.
I think this is a great idea and will be using in future projects. Love the idea of standardization, and think this a very pertinent area to start. Thanks, and hopefully will be able to test and provide feedback.
I agree that functionality like this belongs in a plugin, not a theme. But commercial theme developers (like those on ThemeForest) won’t switch until the distribution of these plugins with the theme is as easy as simply including the code is now.
You can tell your users to download these plugins to receive these features, but if your theme needs the plugin to operate correctly (ex: a portfolio theme using your portfolio plugin), you’ll be dealing with a ton of support with people who didn’t follow the instructions.
This is why I love TGM Activation. It’s a code library you include with your theme which lets you list required and recommended plugins, either in the repo or packaged with the theme. On activation of the theme, it walks you through the process of installing them.
I built an event theme recently and packaged all the core functionality into a functionality plugin. Without TGM Activation, a lot of users would not read the instructions, install the theme, and be disappointed with the result.
Maybe I’ve just been blessed with smart users, but I honestly haven’t had many issues with theme users figuring out installing plugins that a theme supports. You’ll definitely never see me adding something like TGM Activation in my themes.
How many users expect BuddyPress, bbPress, or WooCommerce to be packaged into your theme if you make a theme centered on one of those plugins? This should be rare. If not, that’s a sign of poor communication on the part of the theme author.
A lot of this comes down to the language used. You don’t say, “A complete social networking theme.” You say, “The theme supports BuddyPress.” There’s a bit more to it than that, but that’s the gist of the communication problem.
For me, education is always the number one priority on Theme Hybrid. When a support question is asked, I generally try to teach the user rather than simply tell the user the answer. In the short term, this takes more time to do. However, I have found that it cuts back on support in the long term.
No theme should ever need a plugin to operate correctly. I’m sure that’s not what you meant exactly, but I just want to make sure everyone else reading this knows.
This is actually a good phrase to focus on though. It’s part of the mindset that the theme and plugin are one that we need to get away from. Themes can support plugins but shouldn’t require plugins. Any theme should work out of the box on a basic WordPress install. Users should be able to optionally install plugins that the theme supports to gain access to additional features.
Daris brings up some very good points above regarding the various “types” of portfolio uses.
Justin, would you consider a portfolio base plugin, and then additional plugin extensions that cover individual portfolio types.
Example: I install Portfolio and I want to create Book portfolio as opposed to a Media portfolio…so I go grab the Book extension.
This would also allow other developer to create extensions that work in conjunction with the base theme.
Thoughts?
p.s. I’m anxious to see this come to light because I think you’ve hit a real need here and I’m anxious to put “integrate with Portfolio plugin” on the top of our list for FooBox;)
Actually, the way I’m developing the plugin allows for an infinite number of portfolios or types of portfolios (available in the code now). The idea is to still build just a portfolio base though and allow developers to create “extension” or “add-on” plugins.
Thank you for the Grid Columns plugin. It’s the most straight forward way to do it that I’ve seen. I’ve replaced my own column shortcode with this plugin for three reasons:
It automatically adds first and last column classes.
It automatically adds a container div.
And perhaps most importantly: The attribute syntax is clear and easy to remember.
Feature Request: It would be nice to have the ability to add a class name to both individual columns and the container div.
Honestly I think you have the right idea. I mean, another common feature is “staff” pages or “about us” with images and summaries of the staff. I’ve coded a custom post for that and it could easily be made into a plugin but the “plugin” conversion is not my area so feel free to shoot me a note if you want that code.
Essentially your idea is perfect, Justin, with one exception – you are going solo. WordPress.com had a good idea with the JetPack plugin, though that particular plugin wasn’t optimally coded. A group of common features that can be switched on as easily as a light all packed into a single plugin.
Open this idea up to the public, Justin, for a package, not just individual plugins. Hell, call it the “Great Tadlock Community Endeavor Plugin” for all I care!
Again, great idea – but thinking too small JT.
I really like the grid shortcode plugin, I have a couple of just a suggestion on implementation.
I think it might be better to do something like this
[row]
[column]
first column
[/column]
[column]
Second column
[/column]
[/row]
instead of the current
[column grid=2 span=1]
first column
[/column] [column grid=2 span=1]
Second column
[/column]
There are 2 reasons why I prefer the first implementation.
Because the user doesn’t have to think about the grid and span attributes if she is doing something simple as two columns.
Also you could do something about the not having to use ‘[/column] [column grid=2 span=1] ‘ syntax since you could do something about the added br tag since you are using the row shortcode.
Checkout the https://github.com/ubc/tabs-shortcode for how I implemented the tab shortcode.
Cheers
I’ve already given that approach some thought and think it has merit, but it has its own issues and limitations as well. I’d rather just process everything within a single shortcode than multiple shortcodes. This is how users are used to dealing with shortcodes.
Hello Justin,
I have tested the Portfolio plugin and here is my observation:
For standard user these are the features required out of the box:
1) Project url field to include project url
2) Taxonomies for project classification (web, print, mobile to start with)
3) Image upload field for portfolio thumbnail or getting that image through featured image field
and
4) a query snippet/custom code or page template to display these portfolio items.
1) I plan on adding something like that.
2) That’s already built in. You can have different portfolios.
3) This should already be built in.
4) That should be left up to theme developers. Just create a new
WP_Queryif you need to query the posts in another template, widget, or whatever.What about adding enhancements like changing the icons in the admin menu, changing the “Enter Title Here” and the 32×32 icon in the add and edit screen. When creating a custom post type I like to make it feel for the end user that ist is complete and not just using the default pin icon. Changing the “Enter Title Here” would be more appropriate for like FAQ or Testimonial where the title might be used as the question or name. Just some thoughts.
I’m not an icon designer, so anyone who can do this is more than welcome to contribute.
Do you have a different idea about what “Enter Title Here” should be? I feel like it’s appropriate for portfolio items.
Thanks for sharing both plugins. I have like this lines most, “There’s no need for 22 column shortcodes to handle what one shortcode will do. I see things like [column_one_fourth], [column_two_fifths], and so on. That’s the entire reason shortcodes are allowed to have attributes.”
Awesome article. I look forward to using those plugins. I have a question – do you know of a plugin that allows for custom headers on certain pages?
Thank you dear Justin
I’m glad to see this trend continuing, especially within some of the more established WordPress theme shops. WooThemes today released two plugins along the same lines as your portfolio plugin: Testimonials and Features. They’re both available on GitHub.
There really should be more plugin developers adopting your views on separating the front-end (theme) and back-end (plugin) code. There are way to much plugins adding useful functionality to the admin interface but still being useless because of all the HTML/css/js/-stuff they are automatically adding to the theme. At least there should be an option to deactivate all theme output.
Thank you for posting
I downloaded the portfolios plugin and learned a lot already from your always helpful notes. In my portfolio as a freelancer, I’d want to be able to identify something like “skills” or work areas/projects that could have projects, documents, etc., organized in any way I want–and that don’t have to look the same across the portfolio. For instance, my graphic design area should display mostly images and explanation, my writing area might have blog posts and links to publications, and my editing might have links to my clients’ publications. Finally, I’d want a way for clients to easily provide an overall testimonial or one for a specific project. To me, this means that maybe each is a separate portfolio with different post types?
Just a thought. Thank you again for all you do; I joined Hybrid Theme’s site again as a member!
I completely agree that a “common” column shortcode would be great. I spent a lot of time achieving the same result after replacing one theme by another because they had different shortcodes. I will most likely test yours with two or three themes I am using now.