Ecco fatto... forse meglio gestirlo con una classe statica, ma per dare l'idea mi va bene:
Codice PHP:
<?php
$hooks = array();
function do_action( $hook ){
global $hooks;
$todo = $hooks[$hook];
usort($todo,"cmp");
foreach ( $todo as $val ){
call_user_func( $val['function'] );
}
}
function add_action( $hook, $func, $priority = 10 ){
global $hooks;
$hooks[$hook][] = array(
'function' => $func,
'priority' => $priority
);
}
function cmp($a, $b) {
return $a['priority'] - $b['priority'];
}
function func1(){ echo 'Sono func1 <br>'; }
function func2(){ echo 'Sono func2 <br>'; }
add_action('start','func1', 9);
add_action('end','func2', 10);
add_action('start','func1');
?>
PARTE IL TEST:
1
2
3
4
<?php do_action( 'start' ); ?>
5
6
7
8
<?php do_action( 'end' ); ?>
9
10
TEST FINITO
<?php
echo '<pre>';
print_r($hooks);
echo '</pre>';
?>