Skip to content

Commit

Permalink
Think I've got this one ready for public comment.
Browse files Browse the repository at this point in the history
  • Loading branch information
zamoose committed Jul 2, 2012
1 parent 15b7b7e commit 233e1e8
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 0 deletions.
34 changes: 34 additions & 0 deletions README.md
@@ -1,11 +1,36 @@
# Theme Hook Alliance #

## Status ##
**DRAFT**

## What? ##
Child theme authors and plugin developers need a consistent set of entry points to allow for easy customization and altering of functionality. Core WordPress offers a suite of [action hooks](http://codex.wordpress.org/Plugin_API/Action_Reference/) and [template tags](http://codex.wordpress.org/Template_tags) but does not cover many of the common use cases. The Theme Hook Alliance is a community-driven effort to agree on a set of third-party action hooks that THA themes pledge to implement in order to give that desired consistency.

## Why? ##
There have been [discussions](http://www.wptavern.com/forum/themes-templates/494-standard-theme-hook-names.html) about implementing a common set of hooks, a [Trac ticket](http://core.trac.wordpress.org/ticket/18561#comment:92) and even an [initial pass](http://codex.wordpress.org/User_talk:Dcole07) at implementing something similar. However, for whatever reason[s], these efforts have not gained traction. I proposed this third-party solution [here](http://literalbarrage.org/blog/2012/06/29/wordpress-theme-hook-alliance) and this project is intended to be an implementation of these goals.

## What about WordPress? ##
As stated above, there have been attempts to have something along these lines added to WordPress Core in the past and, while they have generally been seen as good ideas, they have remained as such.

Taking this out of the realm of Core and into the third-party realm is a bit of a risky proposition, to be sure. If the conventions laid out below are not adopted in a widespread fashion, this effort will ultimately fail.

However, this is no reason to wait. Child themes have recently been approved for release in the official [Themes Repository](http://wordpress.org/extend/themes) and plugin authors continue to need more reliable entry points into WordPress' content flow so as to avoid nasty hacks like output buffering.

### When Core does it, Core wins ###
A small note: none of the proposed theme hooks are intended to replace or rewrite existing WordPress functionality. So, for instance, if a desired result can be obtained by filtering the output of e.g. `the_content()`, there is no need to create an entirely new hook. Therefore, any functions that duplicate work Core performs already should be rejected immediately.

### What if Core adds some (or all) of these filters? ###
If this idea gains enough traction, there is a chance that a partial, or even full, portion of these hooks will make their way into Core. When/if this occurs, we can simply update `tha-theme-hooks.php` to include the new `do_action()` calls at the appropriate places. Then, THA users will simply need to update their copy of `tha-theme-hooks.php` to take advantage.

For example, if Core were to introduce a `before_header()` hook, we could (in theory) simply alter `tha_header_before()` as follows

function tha_header_before() {
do_action( 'tha_header_before' );
do_action( 'before_header' );
}

This would allow all themes using the THA hooks to avoid rewriting/refactoring in the case of a Core change.

## Conventions ##

* Hooks should be of the form `tha_` + `[section of the theme]` + `_[placement within block]`.
Expand All @@ -17,4 +42,13 @@ There have been [discussions](http://www.wptavern.com/forum/themes-templates/494
* Hooks placed at the very *end* of a block should use `_bottom`.
* If the theme section covered by a hook can contain multiple semantic elements, it should be pluralized. (Primarily applies to `tha_sidebars_before/after` in the early goings.)

## Usage ##

1. Copy `tha-theme-hooks.php` to a directory inside of your theme; say, `include/`, for instance.
2. Include `tha-theme-hooks.php` via `<?php include( 'include/tha-theme-hooks.php' ); ?>` in your `functions.php` or similar.
3. Using `tha-example-index.php` as a guide, *be sure to implement all of the hooks described in `tha-theme-hooks.php` in order to offer full compatibility*.
4. Profit!

## Core Compatibility ##
None, at the moment.

18 changes: 18 additions & 0 deletions tha-example-index.php
Expand Up @@ -19,6 +19,24 @@
<div id="content">
<?php tha_content_top(); ?>

<!-- This roughly encapsulates The Loop portion of the layout -->
<?php tha_entry_before(); ?>
<div class="entry">
<?php tha_entry_top(); ?>
<h2>This is the title</h2>
<div class="itemtext">
Lorem ipsum and all that rot.
</div><!-- .itemtext -->
<?php tha_entry_bottom(); ?>
</div>
<?php tha_entry_after(); ?>
<!-- Close The Loop -->

<?php tha_comments_before(); ?>

<!-- comments_form() or similar goes here -->

<?php tha_comments_after(); ?>
<?php tha_content_bottom(); ?>
</div><!-- #content -->
<?php tha_content_after(); ?>
Expand Down
36 changes: 36 additions & 0 deletions tha-theme-hooks.php
Expand Up @@ -3,6 +3,8 @@
* Theme Hook Alliance hook stub list.
*
* @package themehookalliance
* @version 1.0-draft
* @since 1.0-draft
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU General Public License, v2 (or newer)
*
* This program is free software; you can redistribute it and/or modify
Expand All @@ -21,6 +23,10 @@
* declares itself to support THA hooks.
*/
define( 'THA_HOOKS_SUPPORT', true );
/**
* Define the version of THA support, in case that becomes useful down the road.
*/
define( 'THA_HOOKS_VERSION', '1.0-draft')
/**
* If/when WordPress Core implements similar methodology, themes and plugins will be
* able to check whether the version of THA supplied by the theme supports Core
Expand Down Expand Up @@ -78,6 +84,36 @@ function tha_content_bottom() {
do_action( 'tha_content_bottom' );
}

/**
* Semantic <entry> hooks
*/
function tha_entry_before() {
do_action( 'tha_entry_before' );
}

function tha_entry_after() {
do_action( 'tha_entry_after' );
}

function tha_entry_top() {
do_action( 'tha_entry_top' );
}

function tha_entry_bottom() {
do_action( 'tha_entry_bottom' );
}

/**
* Comments block hooks
*/
function tha_comments_before() {
do_action( 'tha_comments_before' );
}

function tha_comments_after() {
do_action( 'tha_comments_after' );
}

/**
* Semantic <sidebar> hooks
*/
Expand Down

0 comments on commit 233e1e8

Please sign in to comment.