J'ai étudié la différence entre les hooks action et filter, et autant que je sache, il n'est pas possible d'avoir une fonction qui est ajoutée à un action hook, renvoie une valeur (personnalisée) .
Mon scénario:
add_action( 'save_post', 'create_another_post');
true
) ou elle ne le fait pas (return false
)Comment procéder pour implémenter ce scénario true/false
? J'apprécie votre aide et vos idées.
Correct. Les crochets d'action ne renvoient pas de contenu, et honnêtement, si vous avez besoin d'un crochet d'action pour renvoyer du contenu, il y a de bonnes chances que vous fassiez quelque chose de mal. Cependant, si cela s'avère être votre seule option, la méthode la plus propre consiste à utiliser une variable statique:
function action_value_grab() {
static $value = false;
$is_hooked = current_filter();
if (!empty($is_hooked)) {
$value = true;
}
return $value;
}
// var_dump(action_value_grab()); // debug
add_action('test_hook','action_value_grab');
do_action('test_hook');
// var_dump(action_value_grab()); // debug
Appelez simplement la fonction - static_value_grab()
-- après que le hook se soit déclenché pour obtenir la valeur de $value
.
à mon avis, il s’agit d’un scénario valide. C’est un bon moyen d’offrir votre plugin comme interface à d’autres plugins, mais chaque plugin peut être actif ou inactif et wp ne plantera pas (par rapport à l’appel direct d’une méthode un plugin n'a pas été activé
je l'ai résolu en passant un objet, comme ceci:
// define action with param for result transport
function some_action($someParam, $transport) {
// do stuff
if($someParam > 10) {
$transport->return = true;
} else {
$transport->return = 5;
}
}
add_action('some_action', 'some_action', 10, 2);
// call action
do_action('some_action', 5, $transport = new stdClass());
var_dump($transport->return);
// output true
do_action('some_action', 11, $transport = new stdClass());
var_dump($transport->return);
// output 5