javascript - 用户未登录时 Wordpress AJAX 返回 0

标签 javascript php jquery ajax wordpress

之前有人问过这个问题,但我已经尝试了很多方法来让它工作,但我不知道我错过了什么。我有一个 Wordpress 网站的成员(member)目录,该网站使用 Ajax 调用和显示成员(member)资料。它还允许您按名称的字母顺序对它们进行排序。两者在登录时都能正常工作,但在注销时返回“0”。我已经用多个具有不同权限的帐户对其进行了测试,只要一个帐户使用任何帐户登录,它就可以正常工作。

我都有

add_action('wp_ajax_nopriv_load-filter', 'load_members');

add_action('wp_ajax_load-members', 'load_members');

已添加,据我阅读,它应该适用于已登录和未登录的用户。我假设未登录的用户无法访问 Ajax 工作所必需的东西,可能是我一直在阅读的 ajax-admin.php 文件,但我尝试过的任何修复都无济于事。

我尝试在 chrome 中调试(F12、检查网络错误等),但没有找到有用的信息。我还在我的代码的各个部分添加了 console.log() 行以确定它是否被调用,并且它们都按预期被调用,登录或注销。

无论如何,这是我的 functions.php 代码(不包括 add_action 部分):

     function load_members()
           {

              $letter = $_POST[ 'letter' ];

                    if($letter == "all") {

                        $args = array(
                            'role' => 'Subscriber', );

                            $user_query = new WP_User_Query($args);

                            ob_start();

                            global $user;

                            if (!empty($user_query->results)) {
                            foreach ($user_query->results as $user) {
                            get_template_part('template', 'directory');
                      }
                                } else {
                echo '<div class="center" >No users found.</div>';}
                $response = ob_get_contents();
                    ob_end_clean();

                    echo $response;

                    die(1);

这是我的目录页面中的函数:

function members_get(catID) {
jQuery("a.ajax").removeClass("current");
jQuery("#category-post-content").fadeOut();
$('.' + catID).addClass("current"); //adds class current to the  menu item being displayed so you can style it with css
jQuery("#loading-animation").show();
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); //must echo it?>';
console.log(ajaxurl);
jQuery.ajax({
type: 'POST',
url: ajaxurl,
data: {"action": "load-members", letter: catID },
success: function(response) {
jQuery("#category-post-content").fadeIn();
jQuery("#category-post-content").html(response);
jQuery("#loading-animation").hide();
return false;

}

对 functions.php 部分的格式表示歉意;它粘贴得很奇怪,我试图修复它。有谁知道发生了什么事吗?

最佳答案

问题出在您对 add_action 的调用上。

add_action('wp_ajax_nopriv_load-filter', 'load_members');
add_action('wp_ajax_load-members', 'load_members');

您认为您需要 wp_ajax_(action)wp_ajax_nopriv_(action) 是正确的。两者的 (action) 应该相同。

更新为:

add_action( 'wp_ajax_nopriv_load-members', 'load_members' );
add_action( 'wp_ajax_load-members', 'load_members' );

关于javascript - 用户未登录时 Wordpress AJAX 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41559561/

相关文章:

javascript - 单击超链接切换另一个 div 的类的 jquery 事件

javascript - 调试器在 Visual Studio 中不工作

javascript - 将对象分解为此属性

php - mySQL 时区转换

PHP If Else with isset : else part does not work

javascript - jquery 的官方模板插件和 ICanHaz.js 之间的主要区别是什么?

javascript - fullCalendarjs 方法 fullCalendar ('clientEvents' )返回重复事件

javascript - 如何更改 typescript 中的CSS样式?

javascript - 切换两个箭头的颜色变化

php - 正则表达式验证地址字符串不包含邮政信箱模式