Wordpress - How to check if I am in admin-ajax.php?
Check the constant DOING_AJAX
. Its definition is the first working code in wp-admin/admin-ajax.php
. Some very weird plugins, like Jetpack, are defining that constant in unexpected places, so you might include a check for is_admin()
as well.
Example:
if ( is_admin() && defined( 'DOING_AJAX' ) && DOING_AJAX )
{
// do something
}
I have asked for a simpler way to check this a long time ago, and this was finally implemented in 4.7.0.
So for WP 4.7 and higher you can use:
if ( wp_doing_ajax() )
{
// do something
}
Good news, the function is there now.
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: }
Just to recap, the admin-ajax.php
defines something like this.
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: }