我目前使用localhost,当我想测试对web服务器的ajax请求时,函数get\\u current\\u user\\u id()总是返回0。然而,当我从我的网站发出ajax请求时,它是有效的。在浏览器中打开文件还会返回当前wp\\U用户id。我向其发出请求的文件:
<?php
require_once $_SERVER[\'DOCUMENT_ROOT\'] . \'/wp-load.php\';
echo get_current_user_id();
我的身体里有cors。htaccess已启用,其他WordPress功能正常工作,我的控制台中没有收到任何警告或错误。
我的htaccess:
<IfModule mod_rewrite.c>
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with,
content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE,
OPTIONS"
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
ErrorDocument 401 /index.php?status=404
ErrorDocument 403 /index.php?status=404
ErrorDocument 404 /index.php?status=404
ErrorDocument 500 /index.php?status=404
</IfModule>
提前感谢您的帮助!
编辑:由于“Tim”的回答,我尝试了以下方法,但没有成功。
在我的功能中。php:
function example_ajax_request()
{
echo get_current_user_id();
die();
}
add_action(\'wp_ajax_example_ajax_request\', \'example_ajax_request\');
add_action(\'wp_ajax_nopriv_example_ajax_request\', \'example_ajax_request\');
本地主机上的Javascript:
var ajax = new XMLHttpRequest();
var formData = new FormData();
formData.append("action", "example_ajax_request");
ajax.open(
"POST",
"https://my-website.com/wp-admin/admin-ajax.php"
);
ajax.onload = function() {
console.log(ajax.responseText);
};
ajax.send(formData);
-->当用户未登录时,在控制台中返回0
更新-找到解决方案:
问题是javascript并没有自动跨域发送cookie。我必须设置
var ajax = new XMLHttpRequest();
ajax.withCredentials = true;
在那之后,我不得不补充
Header add Access-Control-Allow-Credentials true
给我的。htaccess,因此允许跨域cookie传输。