【发布时间】:2012-03-29 22:41:01
【问题描述】:
我早些时候在 wordpress.stackexchange.com 上发布了这个。然而,始终没有得到答复。因此,在这里碰碰运气。
我在此详细说明我需要什么以及我为此问题所做的工作。我愿意接受围绕我所做的任何可行的解决方案或新的建议。
我需要使用通过以下方式检索到的用户数据:
$user_data = get_user_by('login', get_query_var('user_login'));
上面的代码使用 URL 中作为 query_var 传递的用户名。到这里为止一切正常。
我在单页加载的几个 Ajax 回调(由 admin-ajax.php 处理)中使用了上述代码。因为,该站点被定位为高容量站点。所有这些 Ajax 请求都会导致对相同数据的多个数据库查询。因此,保存一些数据库查询的明显想法是将数据传递给如下全局变量:
$_GLOBALS['user_data'] = get_user_by('login', get_query_var('user_login'));
然后在 Ajax 回调中使用相同的方法。这里有问题。 Ajax 回调函数都看不到全局 $user_data 变量。在你问之前,是的,我也声明了全局内部回调。
所以,显而易见的答案是:为什么不使用 wp_localize_script 并通过 javascript 将 $user_data 传递给 Ajax 回调,如下所示:
在 PHP 中:
wp_localize_script('jquery', 'ajaxVars', array( 'ajaxurl' => admin_url('admin-ajax.php'), 'user_data' => $user_data));
在 Javascript 中:
jQuery.ajax({
url: ajaxVars.ajaxurl,
type:'POST',
async: false,
cache: false,
timeout: 10000,
data: 'action=ajax_callback&user_data=' + ajaxVars.user_data,
success: function(value) {
alert(value);
},
error: function() {
alert(error);
}
});
但是,这提出了两个问题:
get_user_by('login', get_query_var('user_login')); 返回的对象可以由wp_localize_script() 处理吗?
如果上述问题的答案是肯定的,那么它不会构成安全威胁,因为该对象将包含敏感的用户信息?
为了克服全局变量对 Ajax 回调不可用的问题,我直接在 functions.php 中声明了它(没有将它包装在函数中)。但是,get_query_var('user_login') 直接在functions.php 中使用时不会返回任何数据,这使这个徒劳的练习(您必须将其添加到函数中并通过操作调用它)。
所以,问题仍然存在:如何停止为每个 Ajax 请求发出 $user_data = get_user_by('login', get_query_var('user_login')); 调用?或者有没有办法让get_query_var('user_login') 直接在functions.php 中工作(而不将其包装在函数中)或解决方法?
或者也许是一些全新的开箱即用的想法?
【问题讨论】: