如何在前端的WP插件中进行AJAX调用

时间:2016-02-28 06:08:27

标签: javascript jquery ajax wordpress

我正在开发WP插件,当用户输入ID时,会针对该ID发帖。它在管理方面工作正常。我已按照this示例通过AJAX调用获取数据,但现在我尝试在前端执行此操作,任何人都可以输入ID并获得结果。我删除了用于在管理员端创建页面的功能。现在我有3个名为:

的函数
  1. hello_word()
  2. ajax_script()
  3. ajax_handler()
  4. 我已经尝试使用以下挂钩进行注册,但它无法正常工作

    • add_action(' admin_footer',' ajax_script');
    • add_action(' wp_ajax_my_action',' ajax_script');
    • add_action(' wp_ajax_nopriv_my_action',' ajax_script');

    hello_word()函数包含文本字段和按钮的代码。 我从模板文件中调用hello_word()函数并且它正确显示,但是当我点击按钮时AJAX不工作。我发现的问题是ajax_script()未加载,并且在源代码的调试模式下,单击按钮时没有任何内容。

    那么如何从模板文件中调用hello_word()来正确加载ajax函数?

1 个答案:

答案 0 :(得分:1)

你有点混淆了。

add_action( 'wp_ajax_my_action', 'your_handler' );add_action( 'wp_ajax_nopriv_my_action', 'your_handler' );用于添加函数,该函数将分别处理对登录和访客用户的ajax调用的响应。

add_action( 'wp_footer', 'ajax_script' ); - 页脚的前端操作为wp_footer,仅当您的主题实际调用它时才会起作用。但是更好的做法是为你的插件提供一个单独的.js文件和所有js,而不是内联输出。
要将脚本排入队列,您可以使用以下代码

function enqueue_assets()
{
    wp_enqueue_script('your_plugin_js', plugins_url('/my.js', __FILE__), array('jquery'), false, true); //true will put it into the footer
    wp_localize_script('your_plugin_js', 'your_plugin_ajax_object', array('ajax_url' => admin_url('admin-ajax.php', ((is_ssl()) ? 'https' : 'http')))); // your url for ajax call wil be available as your_plugin_ajax_object.ajax_url
    //wp_enqueue_style('your_plugin_css', plugins_url('/my.css', __FILE__)); // you can output css here too if you want
}
add_action('wp_enqueue_scripts', 'enqueue_assets');

您可以随时随地拨打hello_world电话。