WP_AJAX est une classe d'interface avec le système AJAX intégré de WordPress. Cette classe est conçue pour faire abstraction complète du développeur du système traditionnel basé sur les hooks vers une structure de style contrôleur propre. Définissez simplement la classe, faites écho aux URL avec la méthode url($params = []) et écrivez le code que vous souhaitez exécuter dans la méthode run().
Class ExampleAction extends WP_AJAX {
protected $ action = ' example-action ' ;
protected function run (){
// Your Code Here!
update_option ( ' name ' , $ this -> get ( ' name ' ));
}
}
ExampleAction:: listen ();
ExampleAction::url() // http://example.com/wp-admin/admin-ajax.php?action=example-action
ExampleAction:: url ([ ' name ' => ' Anthony Budd ' ]) // http://example.com/wp-admin/admin-ajax.php?action=example-action&name=Anthony%20Budd
ExempleAction.php
< a href =" <?= ExampleAction::url(['name' => 'Anthony Budd']) ?> " > This is a link </ a >
Page-Template.php
$ ( '.submit-btn' ) . click ( function ( ) {
$ . post ( 'http://example.com/wp-admin/admin-ajax.php' , {
action : 'example-action' ,
name : $ ( '.name-field' ) . val ( ) ,
} , function ( data ) {
console . log ( data )
} , 'JSON' ) ;
} ) ;
script.js
Exiger WP_AJAX avec composer
$ composer require anthonybudd/wp_ajax
Téléchargez la classe WP_AJAX et exigez-la en haut de votre fichier function.php.
require ' src/WP_AJAX.php ' ;
Vous devrez créer une nouvelle classe qui étend WP_AJAX. Cette classe doit avoir une propriété protégée appelée $action et une méthode protégée nommée run(). $action sera le nom de l'action AJAX Voir wp_ajax_(action).
Class Example extends WP_AJAX
{
protected $ action = ' example ' ;
protected function run (){
echo " Success! " ;
}
}
Ensuite, vous devez appeler la méthode statique Listen(). Cela créera tous les hooks afin que WordPress sache appeler la méthode run() lorsque le point de terminaison AJAX correct est atteint. Remarque : Vous devrez appeler la méthode Listen() pour chacune de vos actions AJAX.
ExampleAJAX:: listen ();
Si vous souhaitez autoriser uniquement les utilisateurs connectés à accéder à votre point de terminaison AJAX, ajoutez l'argument FALSE à la méthode d'écoute.
ExampleAJAX:: listen ( FALSE );
Si vous souhaitez répondre à une requête AJAX avec des données, la méthode JSONResponse() définira automatiquement l'en-tête du type de contenu sur « application/json » et encodera JSON les données fournies à la méthode.
Je suis conscient que WordPress a une fonction appelée wp_send_json() mais, étant donné que je sais à quel point les développeurs WP sont ennuyés d'avoir inclus cette méthode, je ne la supprimerai pas.
Class ExampleAJAX extends WP_AJAX {
..
protected function run (){
$ post5 = get_post ( 5 );
$ this -> JSONResponse ( $ post5 );
}
}
Example:: url () // Returns the url of the ajax endpoint. Example http://ajax.local/wp/wp-admin/admin-ajax.php?action=example
$ this -> isLoggedIn (); // Returns TRUE or FALSE if the current visitor is a logged in user.
$ this -> has ( $ key ); // has() will return TRUE or FALSE if an element exists in the $_REQUEST array with a key of $key
$ this -> get ( $ key , [ $ default = NULL ]); // The get() method will return the specified HTTP request variable. If the variable does not exist it will return NULL by default. If you would like to set a custom string as the default, provide it as the second argument.
$ this -> requestType (); // Returns 'PUT', 'POST', 'GET', 'DELETE' depending on HTTP request type
$ this -> requestType ( ' POST ' ); // Returns (bool)
$ this -> requestType ([ ' POST ' , ' PUT ' ]); // Returns (bool)
Class CreatePost extends WP_AJAX
{
protected $ action = ' create_post ' ;
protected function run (){
if ( $ this -> isLoggedIn ()){
$ post = [
' post_status ' => ' publish '
];
if ( $ this -> requestType ([ ' POST ' , ' put ' ]) ){
$ post [ ' post_content ' ] = ' This request was either POST or PUT ' ;
} else if ( $ this -> requestType ( ' get ' ) ){
$ post [ ' post_content ' ] = ' This request was GET ' ;
}
$ post [ ' post_title ' ] = sprintf ( ' This post was created by %s ' , $ this -> user -> data -> user_nicename );
wp_insert_post ( $ post );
$ this -> JSONResponse ( $ post );
}
}
}
CreatePost:: listen ();
// http://example.com/wp-admin/admin-ajax.php?action=create_post