I'm using the Thematic framework for a child theme. It has a number of hooks, but I'm looking at thematic_header() in particular. The thematic_header() hook adds the following actions (through add_action):
<?php
add_action('thematic_header', 'thematic_brandingopen', 1);
add_action('thematic_header', 'thematic_blogtitle', 3);
add_action('thematic_header', 'thematic_blogdescription', 5);
add_action('thematic_header', 'thematic_brandingclose', 7);
add_action('thematic_header', 'thematic_access', 9);
?>
The content of the actions is irrelevant.
My question is this: How can I change the priorities of the five actions in question. For instance, I want thematic_access() to load before thematic_brandingopen(). Only way to do this that I've been able to figure out is by removing and re-adding the actions, ala:
<?php
function remove_thematic_actions() {
remove_action('thematic_header', 'thematic_access');
add_action('thematic_header', 'thematic_access', 0); //puts it above thematic_brandingopen
}
add_action ('init', 'remove_thematic_actions');
That seems like a stupid way of accomplishing something very simple. Is there a way to access and sort/reorder whatever data structure stores actions in WP?
From WordPress
if a hook was registered using a priority other than the default of 10, then you must also specify the priority in the call to remove_action().
So I think you can first remove using following
remove_action('thematic_header', 'thematic_brandingopen', 1);
remove_action('thematic_header', 'thematic_access', 9);
and the add again using different priority
add_action('thematic_header', 'thematic_access', 1);
add_action('thematic_header', 'thematic_brandingopen', 2);
not to self-promote but I have done some work on this to provide a non-coding solution through a WordPress plugin called Prioritize Hooks. My plugin lets you set the priorities of various registered hooks through a UI and does the overriding in runtime so the code isn't modified.
Just in case this helps someone, the variable actions are stored in is
global $wp_filter;
var_dump( $wp_filter[$hook_name] );
Which is an array of arrays with the keys being the priority when the action was added.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With