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



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

  1. hello_word()
  2. ajax_script()
  3. ajax_handler()

我尝试使用以下钩子进行注册,但它不起作用

  • 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 函数呢?

你把事情搞混了。

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 函数。

最新更新