add_action and Ajax

时间:2015-12-14 作者:Lucio Crusca

我正在开发一个插件,我从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? 我做错了什么?

2 个回复
最合适的回答,由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\' );

}

SO网友:Bordoni

那里发生的事情是您需要移动的:

add_action( \'wp_ajax_\'.$script_handle, array($this, \'userprofileform_process\') );
add_action( \'wp_ajax_nopriv_\'.$script_handle, array($this, \'userprofileform_process\') );
超出enqueue_scripts 函数,因为它的设置方式没有挂接这些操作,因为此函数只在前端操作上执行。

相关推荐

WordPress AJAX错误400向远程站点发送数据的错误请求

我正在使用发件人。net获取电子邮件订阅列表。这个网站给了我一些信息,可以将用户的电子邮件添加到订阅列表中。我想使用WordPress ajax来实现这一点。但它返回错误400错误请求。我的代码是:文件ajax新闻脚本。js公司: jQuery(document).ready(function($){ // Perform AJAX send news on form submit $(\'form#fnews\').on(\'submit\', funct