Existe-t-il de toute façon pour détecter si l'opération actuelle du serveur est actuellement une demande AJAX dans WordPress?
Par exemple:
is_ajax()
Si vous utilisez AJAX comme recommandé dans le codex , vous pouvez tester le DOING_AJAX
constant:
if (defined('DOING_AJAX') && DOING_AJAX) { /* it's an AJAX call */ }
WordPress 4.7 a introduit un moyen facile de vérifier les demandes AJAX, j'ai donc pensé ajouter à cette question plus ancienne .
wp_doing_ajax()
À partir de Référence développeur :
Description: détermine si la demande en cours est une demande WordPress Ajax.
Retour: (bool) True si c'est une demande WordPress Ajax, false sinon.
Il s'agit essentiellement d'un wrapper pour DOING_AJAX.
Pour voir si la requête actuelle est une requête AJAX envoyée depuis une bibliothèque js (comme jQuery), vous pouvez essayer quelque chose comme ceci :
if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
//This is an ajax request.
}
Je ne sais pas si WordPress a une fonction pour cela, mais cela peut être fait en créant vous-même une simple.
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
// Is AJAX request
return true;
}
Je sais que c'est un vieux fil, mais il y a un problème avec la réponse acceptée,
La vérification de la constante DOING_AJAX définie sera toujours vraie, si la demande concerne le fichier admin-ajax.php. ( https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-admin/admin-ajax.php#L16 )
Parfois, les hooks admin-ajax.php ne sont pas utilisés pour AJAX, juste un simple point de terminaison (Paypal IPN par exemple).
La bonne façon est ce que Ian et Spencer ont mentionné.
if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
//This is an ajax request.
}
(aurait commenté ... mais pas de représentant)
if ( ! function_exists('is_ajax') ) {
function is_ajax() {
return defined( 'DOING_AJAX' );
}
}
Personnellement, je préfère la wp_doing_ajax()
, mais voici un autre exemple qui devrait le faire.
if( true === strpos( $_SERVER[ 'REQUEST_URI' ], 'wp-admin/admin-ajax.php' ) ) {
// is doing ajax
}