我正在开发一个插件,我从WPPB 和Wordpress 4.3.1。我把它命名为dogmaweb。我需要通过Ajax向插件提交一个表单。表单由插件本身创建。在我的课堂上,dogmaweb。php我正在尝试添加处理表单数据服务器端的操作,现在我想到的是:
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);
}
问题的症候是管理ajax。php没有调用我的函数,它返回0。我已经仔细阅读了wordpress代码以了解原因(我正在使用Netbeans和xdebug)。问题是
these lines of code in plugin.php 找不到
$tag
在
$wp_filter
大堆这个
$tag
该点的变量包含
"wp_ajax_userprofilesumbit"
, 这正是我为
$hook
add\\u action函数的参数(我使用了相同的
$script_handle
可以在我的代码中看到的变量)。我也经历了
add_action
代码,我相信全球
$wp_filter
数组不包含
"wp_ajax_userprofilesumbit"
按键时间
add_action
在我调用它后返回。然而,我也确信,当插件插入时,它不再包含该键。php执行(由admin ajax.php调用)。
为什么要从中删除我的筛选器$wp_filter
? 我做错了什么?
最合适的回答,由SO网友:birgire 整理而成
我浏览了插件的代码,您可以尝试使用define_public_hooks()
的方法Plugin_Name
类注册的ajax操作回调Plugin_Name_Public
类别:
/**
* 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\' );
}