Gibt einen benutzerdefinierten Wert in einer function zurück, die einem Aktions-Hook hinzugefügt wurde

Ich habe den Unterschied zwischen Action- und Filter-Hooks untersucht, und soweit ich weiß, ist es nicht möglich, dass eine function, die einem Action- Hook hinzugefügt wird, einen (benutzerdefinierten) Wert zurückgibt .

Mein Szenario:

  • Nach dem Speichern eines Beitrags versuche ich einen anderen Beitrag zu speichern. Daher verwende ich add_action( 'save_post', 'create_another_post');
  • Abhängig von einigen Bedingungen, wird dieser zusätzliche Beitrag gespeichert (für diesen Fall würde ich gerne true ) oder nicht ( false )

Wie würde ich dieses true/false Szenario implementieren? Ich schätze Ihre Hilfe und Ideen.

Solutions Collecting From Web of "Gibt einen benutzerdefinierten Wert in einer function zurück, die einem Aktions-Hook hinzugefügt wurde"

Richtig. Aktions-Hooks geben keinen Inhalt zurück, und ehrlich gesagt, wenn Sie einen Aktions-Hook benötigen, um Inhalte zurückzugeben, gibt es eine ziemlich gute Chance, dass Sie etwas falsch machen. Wenn es sich jedoch um Ihre einzige Option handelt, ist der sauberste Weg, dies zu tun, mit einer statischen Variablen:

 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 

Rufen Sie einfach die function – static_value_grab() – auf, nachdem der Hook static_value_grab() , um den Wert von $value .

Meiner Meinung nach ist dies ein gültiges Szenario, es ist ein solider Weg, um Ihr Plugin als Schnittstelle zu anderen Plugins anzubieten, aber jedes Plugin kann aktiv oder inaktiv sein und wp wird nicht abstürzen (im Vergleich zum Aufruf einer Methode direkt, die möglicherweise nicht existiert, weil Ein Plugin wurde nicht aktiviert

Ich triggerse es, indem ich ein Objekt passierte, so:

 // 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