Grundfunktionsaufruf bei Init fehlgeschlagen

Ich habe meinen Kopf eine Weile gegen diesen Kopf geschlagen. Ich habe diesen sehr einfachen Code in meinem Plugin:

add_action('init', 'register_shortcodes'); $shortcodeRegistrationRan = False; function register_shortcodes() { global $shortcodeRegistrationRan; $shortcodeRegistrationRan = True; echo "Ran = True"; add_shortcode( 'accountability', array($hfMain, 'processAccountabilityShortcode') ); } 

Das Problem ist, $shortcodeRegistrationRan niemals auf True , und “Ran = True” wird nirgendwo auf der Seite angezeigt. Was vermisse ich?

Ich verwende SimpleTest für WordPress , um den Status meiner Laufflagge zu überprüfen. Ich habe viele andere bestandene Tests, also läuft die Testsuite gut. Mein Test sieht folgendermaßen aus:

 public function testShortcodeRegistrationRan() { global $shortcodeRegistrationRan; $this->assertEqual($shortcodeRegistrationRan, True); } 

Zu Beginn der Testsuite:

 require_once(dirname(__FILE__) . '/../[PLUGIN NAME].php'); 

EDIT: Per @ s_ha_dum Ratschlag, ich habe einen neuen Test mit der function shortcode_exists hinzugefügt:

 public function testShortcodeRegistration() { $this->assertEqual(shortcode_exists('accountability'), True); } 

Leider geht es auch nicht durch.

EDIT: Hier ist der vollständige Kontext:

 =") ) { die("You need at least version 3.0 of WordPress to use the copyright plugin"); }*/ function my_plugin_activate() { error_log("my plugin activated"); } register_activation_hook(__FILE__,"my_plugin_activate"); if (!class_exists("HfAccountability")) { class HfAccountability { private $currentUser; function HfAccountability() { //constructor $this->currentUser = wp_get_current_user(); } function getCurrentUserLogin() { return $this->currentUser->user_login; } function processAccountabilityShortcode( $atts ) { #$to = '[MY EMAIL ADDRESS]'; #$subject = 'Testing Mandrill integration'; #$message = "Yup, that's all we're doing"; #wp_mail( $to, $subject, $message, $headers, $attachments ); return 'We tried.'; } } } if (class_exists("HfAccountability")) { $hfMain = new HfAccountability(); } //Actions and Filters /* if (isset($hfMain)) { //Actions add_action('init', 'register_shortcodes'); //PROBLEMATIC LINE //Filters $actionsRan = True; } */ add_action('init', 'register_shortcodes'); $shortcodeRegistrationRan = False; function register_shortcodes() { global $shortcodeRegistrationRan; $shortcodeRegistrationRan = True; echo "Ran = True"; add_shortcode( 'accountability', array($hfMain, 'processAccountabilityShortcode') ); } 

Solutions Collecting From Web of "Grundfunktionsaufruf bei Init fehlgeschlagen"

Ich werde vorschlagen, dass das, was Sie tun, zu komplex ist, zumindest soweit ich Sie verstehe.

Sie können feststellen, ob Ihr Shortcode mit der Core-function shortcode_exists registriert wurde, die einen boolean shortcode_exists zurückgibt. Soweit ich das beurteilen kann, sollte die Verwendung dieser function dem oben genannten Code vollständig entsprechen.

Ich fühle mich sehr unklug. Mein Problem war zweifach:

  1. Zuerst wurde mein Plugin irgendwie deaktiviert.
  2. Zweitens stellte sich heraus, dass ich der function add_shortcode den Namen der class und nicht eine Instanz dieser class geben musste. Es wäre toll, wenn jemand erklären könnte, warum das so ist. Diese Seite zeigte an, dass jeder Weg funktionieren würde.

Es läuft also alles und meine Tests vergehen.