Answers:
检查常数DOING_AJAX
。其定义是中的第一个工作代码wp-admin/admin-ajax.php
。一些非常奇怪的插件(例如Jetpack)正在意外位置定义该常量,因此您可能还需要进行检查is_admin()
。
例:
if ( is_admin() && defined( 'DOING_AJAX' ) && DOING_AJAX )
{
// do something
}
我要求一种更简单的方法来检查很久以前,并且最终在4.7.0中实现了这一点。
因此,对于4.7或更高版本的WP,您可以使用:
if ( wp_doing_ajax() )
{
// do something
}
FALSE
。
false
。先生,+ 1!
好消息,该功能已经存在。
File: /wp-includes/load.php
1037: /**
1038: * Determines whether the current request is a WordPress Ajax request.
1039: *
1040: * @since 4.7.0
1041: *
1042: * @return bool True if it's a WordPress Ajax request, false otherwise.
1043: */
1044: function wp_doing_ajax() {
1045: /**
1046: * Filters whether the current request is a WordPress Ajax request.
1047: *
1048: * @since 4.7.0
1049: *
1050: * @param bool $wp_doing_ajax Whether the current request is a WordPress Ajax request.
1051: */
1052: return apply_filters( 'wp_doing_ajax', defined( 'DOING_AJAX' ) && DOING_AJAX );
1053: }
回顾一下,admin-ajax.php
定义是这样的。
File: /wp-admin/admin-ajax.php
11: /**
12: * Executing Ajax process.
13: *
14: * @since 2.1.0
15: */
16: define( 'DOING_AJAX', true );
17: if ( ! defined( 'WP_ADMIN' ) ) {
18: define( 'WP_ADMIN', true );
19: }
Fuxias解决方案false
还会返回管理面板发出的Ajax请求。但是这些请求应该返回true
,因为您请求的数据是为管理员视图提供的。要解决此问题,可以使用以下功能:
function saveIsAdmin() {
//Ajax request are always identified as administrative interface page
//so let's check if we are calling the data for the frontend or backend
if (wp_doing_ajax()) {
$adminUrl = get_admin_url();
//If the referer is an admin url we are requesting the data for the backend
return (substr($_SERVER['HTTP_REFERER'], 0, strlen($adminUrl)) === $adminUrl);
}
//No ajax request just use the normal function
return is_admin();
}
if ( defined( 'DOING_AJAX' ) )
本身就足够了。仅设置常量,admin-ajax.php
因此您无需检查值。