Admin-ajax 在没有 Wordpress 登录的情况下无法工作

Admin-ajax not working without Wordpress login

我在 WordPress 中构建了一个简单的 JSON API,可通过对 /wp-admin/admin-ajax.php 的 GET 请求获得。它所做的只是打印一些常量 JSON 对象。当我登录到 Wordpress 时,它工作正常。但是,注销后出现 400 错误。该问题不是由某些语法错误引起的,也与浏览器缓存无关。此外,“操作”参数已正确定义,因为它在我登录时正在运行。错误的来源可能是什么?

您需要为“nopriv”ajax请求添加一个操作

add_action("wp_ajax_name_of_function", "name_of_function");
add_action("wp_ajax_nopriv_name_of_function", "name_of_function");

**** 更新

在 Wordpress 中使用 AJAX 时,最好利用平台的 wp_create_nonce() 功能来增加一点安全性。使用起来很简单:

  1. 在 HTML 元素 data- 属性或 JS 变量中将随机数添加到页面
  2. 在发送到服务器的 AJAX 数据中包含 nonce 值
  3. 在 PHP 端,检查 nonce 值是否匹配

PHP 代码示例

<body data-nonce="<?= wp_create_nonce("nonce"); ?>">
if(wp_verify_nonce($_POST['nonce'], "nonce")) { echo "We're good"; };