themehookalliance icon indicating copy to clipboard operation
themehookalliance copied to clipboard

Idea: Hook into a specific theme's existing hooks

Open Cais opened this issue 12 years ago • 4 comments

Just a thought/idea to help make this idea more palatable to theme developers already using their own hook system / architecture. Using an example snippet:

/**
* Semantic <header> hooks
*
* $tha_supports[] = 'header';
*/
function tha_header_before() {
do_action( 'tha_header_before' );
}

I suggest adding to the tha-theme-hooks.php code a commented out line after each function to hook the THA supported hook into an existing theme's hook, for example:

/**
* Semantic <header> hooks
*
* $tha_supports[] = 'header';
*/
function tha_header_before() {
do_action( 'tha_header_before' );
}
/** Change 'existing_theme_hook_before_header' to something more appropriate */
// add_action( 'existing_theme_hook_before_header', 'tha_header_before');

This works in practice but I will leave it to you to decide if you want to make it obvious to others. Of course, this would also be unique for each theme that implements this idea.

I plan to add something like this as an enhancement plugin for my latest theme.

Cais avatar Oct 05 '12 17:10 Cais

I'd actually spoken to Nathan Rice about this in re: Genesis eventually supporting such a thing. A shim plugin such as the one you suggest is actually a good idea.

Hmm. How best to formalize it, though?

zamoose avatar Oct 05 '12 20:10 zamoose

I finally got to the point where I could properly add this into Opus Primus (soon to be released WordPress theme). Here is a link to the gist "bridge" https://gist.github.com/Cais/4719335 ... if nothing else it can serve as a starting point for formalization discussions?

Cais avatar Feb 06 '13 01:02 Cais

The way I implemented this in Oenology, since I already had template-tag functions in the template, that fired the custom Theme template hooks (such as oenology_hook_content_after()), was simply to add the tha_hook_name() inside the appropriate template-tag function:

/**
 * Define custom action hooks
 */

/**
 * Action hook after div#content
 * 
 * This action hook fires after the div#content container. It
 * can be used to add content after div#content is output.
 * 
 * Template file: footer.php
 * 
 * @uses do_action()
 * 
 * @since Oenology 2.0
 */
function oenology_hook_content_after() {
    do_action( 'oenology_hook_content_after' );
    tha_content_after();
}

chipbennett avatar Feb 21 '13 19:02 chipbennett

I just finished refactoring all of my action hooks to the same "format" of < namespace >-< function >-< location > where < function > can be whatever and location is either top/bottom or before/after. Which mean my "bridge" now is simply using add_action( < my_namespace >_*, tha_* );

If WordPress core adopts these, I will simple write an appropriate "bridge" for those hook names in the same manner I added the THA hooks. The only thing to be considered with either of these methods is without a priority being set specifically they will fire in their order of definition.

I intend to go back and look at the add_action() priority values after I write a "real" plugin to take advantage of the THA system. Then I will be able to work with some reasonable expectations and output.

Cais avatar Feb 21 '13 21:02 Cais