How do I revise a theme so that I can publish my event hooks and anyone can build a plugin to add new functionality easily to my theme?
|
After working on several projects so big I didn’t even know all the people involved, I came to one conclusion: Keep it simple, write great documentation. Code is simple if it is easy to read, to learn and to extend. Do not reinvent the wheel: Use the given hooks wherever possible, add new ones in a predictable scheme. A very basic example:
By looking at the Register all callbacks for your hooks in one place: the start of the Example:
Include additional files as late as possible, make it easy to replace those files, and use one file per class. Use PHPDoc for all functions and classes, add the hook each one is called. Example:
The Avoid code that makes plugin code hard to write:
And last but not least: Use version control (Git, Mercurial), write atomic commits, and explain in each commit message why you made this change. |
||||
|
|
Try to use standardized hooks. Check out the ones from the Theme Hook Alliance: https://github.com/zamoose/themehookalliance |
|||||
|
|
There really is no definite answer to your question: How to make a theme "plugin-ready"? Although, there are several things which you should make use of in your theme. I cannot list every single thing you should do in such great detail. However, I can provide a short list with a quick explanation why you should be using them. WordPress Core Functions
If you are ever unsure of a particular function, and you know it has to exist somewhere, try visiting Query Posts, for a better WordPress code reference. WordPress Hooks (Actions and Filters)The next thing you should consider would be WordPress Hooks, or... Actions and Filters to be politically correct.
By default, WordPress already provides support for many events triggered in your theme if you're using those functions posted in the numbered list, above this section. These "events" are referred to as Hooks, which allow plugin developers to add, modify, or remove code from certain areas within your theme. Or fire a certain event, when another event is triggered in your theme. Which brings us to the next area you should be thinking about, while creating a "Plugin-Ready" WordPress theme. Creating your own WordPress HooksIt would be wise to learn how to create your own WordPress actions and WordPress filters, within your theme. This will allow plugin developers to HIGHLY manipulate your WordPress theme. If you don't know how to create WordPress actions or WordPress filters, click here to learn more about creating WordPress actions with Simply just by using more of the default functions provided by WordPress core (Like the ones listed in the first numbered list at the beginning of this answer, or else here for a full function index), a LOT of the hooks that developers would need to use, are already defined by the core. Do not ever be shy with creating your own WordPress hooks, within your WordPress theme. It's always better to have many many hooks available for developers to tap into and make use of, rather than not enough to do what they need to do. Just remember to use unique references to your hook names. (They must be unique, so that they do not conflict with either existing WordPress Core hooks, or existing WordPress hooks created by other plugin developers.) By creating your own hooks, WordPress plugin developers can hook into your custom created WordPress hooks using Which is great, when you release an update for your theme, because their changes to your theme will be persistent and won't be over-written or lost by the theme update. As per |
|||||
|
|
As an alternative to your answer why don't you do something similar to this instead? In your theme file place a hook,
|
My strategy was to make it kind of brainless and consistent so that one doesn't have to keep thinking up custom events all over the place. Note that my strategy provides a consistent way to handle POST, GET, reaction to $_SERVER variables and get_option() settings strings, and also a consistent way to handle pre and post content display. Now, granted, once this is done, however, if one wants to take it to the next level and add even more custom events as you suggest above, then yes, that's probably going to help, where warranted. – Volomike Oct 28 '12 at 19:54 |
|
@Volomike What are the inconsistencies you think exist with handling $_POST/$_GET variables etc in WP? Because I don't have a problem working with these responses, especially where existing WP hooks are concerned. Genuinely want to know your thought process on this. Although, I don't recommend your method, if you really had to do it your way you'd be better of using a wrapper function that you can use at the start and end of your template file that output your code which is too verbose to be scattered across template files in its current form. – userabuser Oct 29 '12 at 13:49 |
|
1) Separate every theme file so that you have PHP at the top, and HTML at the bottom. Then, in the HTML portion, inject variables in like so:
or use PHP Alternative Syntax stuff minimally for loops and if/then/else conditions. Keyword -- minimally. See, the bulk of your PHP should be at the top of the file. You might be scratching your head on why the
See how easy it is to debug? Plus, because I use ALL CAPS on the variable name, I can find them easy in the HTML portion of the page. And why did I call it 2) Move any library or class file includes to the top of the PHP file such as:
3) Following the library includes, set any constants or static pieces of information, or read from 4) Following the "settings" initializing area (step 3), do any 5) Following the GET/POST variable processing (step 4), add this snippet of code, and note that I used "mytheme_" as a prefix for the theme name, but you can change "mytheme_" to something else.
6) Right before you do the
7) At the end of the file, after all the HTML, add this snippet of code:
////////////// Now that this is done, you can code a fresh plugin and when you use You can use Don't forget to do this even on the admin panels you create with your theme, not just the frontend of the theme. Note on the several lines above you can reduce this a little with a couple functions, such as one for finding the hook name. Just don't put the line that has |
|||||||||||||||||||
|
