问题描述
现在我的插件,我正在使用 in_admin()
来确定用户是在该站点的前端还是在管理区域。但是,当插件使用 admin-ajax.php
处理 ajax 请求时,会出现此问题。
只有在处理 admin-ajax.php
文件或站点的前端时,才需要注册钩子和插件。做这个的最好的方法是什么?
最佳解决方案
检查常数 DOING_AJAX
。它的定义是 wp-admin/admin-ajax.php
中的第一个工作代码。一些非常奇怪的插件,如 Jetpack,是 defining that constant in unexpected places,所以你也可以包括支票 is_admin()
以及。
例:
if ( is_admin() && defined( 'DOING_AJAX' ) && DOING_AJAX )
{
// do something
}
很久以前我有 asked for a simpler way to check this,最终在 4.7.0 中实现了。
所以对于 WP 4.7 及更高版本,您可以使用:
if ( wp_doing_ajax() )
{
// do something
}
次佳解决方案
好消息,功能现在在。
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: }
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。