add_action und Ajax

Ich entwickle ein Plugin und ich habe mit WPPB und WordPress 4.3.1 begonnen. Ich habe es Dogmaweb genannt. Ich muss ein Formular über Ajax an das Plugin senden. Das Formular wird vom Plugin selbst erstellt. In meiner class-dogmaweb.php versuche ich, die Aktion hinzuzufügen, die die Formular-Daten-Server-Seite verarbeitet, und hier ist, was ich mir ausgedacht habe, bis jetzt:

public function enqueue_scripts() { $script_handle = 'userprofilesumbit'; add_action( 'wp_ajax_'.$script_handle, array($this, 'userprofileform_process') ); add_action( 'wp_ajax_nopriv_'.$script_handle, array($this, 'userprofileform_process') ); wp_register_script( $script_handle, plugins_url() . '/public/js/dogmaweb-public.js' ); $userprofilesumbit_data = array('ajax_url' => admin_url( 'admin-ajax.php' ), 'form_action' => $script_handle, 'form_id' => '#'.Dogmaweb::$userprofileform_id); wp_localize_script($script_handle, 'submit_params', $userprofilesumbit_data); wp_enqueue_script($script_handle); } 

Das Symptom des Problems ist, dass admin-ajax.php meine function nicht aufruft und es 0 zurückgibt. Ich bin den wordpress-Code durchgegangen, um zu verstehen, warum (ich verwende Netbeans und xdebug). Das Problem ist, dass diese Codezeilen in plugin.php das $tag im Array $wp_filter nicht finden. Die $tag Variable an diesem Punkt enthält "wp_ajax_userprofilesumbit" , was genau das ist, was ich für das $hook Argument für die add_action-function angegeben habe (ich habe dieselbe $script_handle Variable verwendet, wie Sie in meinem Code sehen können). Ich bin auch durch den Code add_action und ich bin mir sicher, dass das globale Array $wp_filter Schlüssel "wp_ajax_userprofilesumbit" wenn add_action nach dem Aufruf zurückkommt. Ich bin mir aber auch sicher, dass es diesen Schlüssel nicht mehr enthält, wenn plugin.php ausgeführt wird (aufgerufen von admin-ajax.php).

Warum wird mein Filter aus $wp_filter ? Was mache ich falsch?

Solutions Collecting From Web of "add_action und Ajax"

Ich habe den Code des Plugins define_public_hooks() und Sie könnten versuchen, die Methode define_public_hooks() der class Plugin_Name zu verwenden, um Ihre Plugin_Name class Plugin_Name zu registrieren:

 /** * Register all of the hooks related to the public-facing functionality * of the plugin. * * @since 1.0.0 * @access private */ private function define_public_hooks() { $plugin_public = new Plugin_Name_Public( $this->get_plugin_name(), $this->get_version() ); $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' ); $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' ); // Add your ajax actions here instead $script_handle = 'userprofilesumbit'; $this->loader->add_action( 'wp_ajax_' . $script_handle, $plugin_public, 'userprofileform_process' ); $this->loader->add_action( 'wp_ajax_nopriv_' . $script_handle, $plugin_public, 'userprofileform_process' ); } 

Was dort passiert ist, dass du dich bewegen musst:

 add_action( 'wp_ajax_'.$script_handle, array($this, 'userprofileform_process') ); add_action( 'wp_ajax_nopriv_'.$script_handle, array($this, 'userprofileform_process') ); 

Von der function enqueue_scripts , da diese Aktionen auf die Art und Weise, wie sie eingerichtet wird, nicht gehakt sind, da diese function nur für Front-End-Aktionen ausgeführt wird.