WP_AJAX عبارة عن فئة للتواصل مع نظام AJAX المدمج في WordPress. تم تصميم هذه الفئة لتجريد المطور بالكامل من النظام التقليدي القائم على الخطاف إلى بنية نمط وحدة التحكم النظيفة. ما عليك سوى تحديد الفئة وارتداد عناوين url باستخدام طريقة url($params = []) وكتابة الكود الذي تريد تنفيذه في طريقة 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
exampleAction.php
< a href =" <?= ExampleAction::url(['name' => 'Anthony Budd']) ?> " > This is a link </ a >
صفحة-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
يتطلب WP_AJAX مع الملحن
$ composer require anthonybudd/wp_ajax
قم بتنزيل فئة WP_AJAX واطلبها في أعلى ملف jobs.php الخاص بك.
require ' src/WP_AJAX.php ' ;
ستحتاج إلى إنشاء فئة جديدة تمتد إلى WP_AJAX. يجب أن تحتوي هذه الفئة على خاصية محمية واحدة تسمى $action وطريقة محمية واحدة تسمى run(). سيكون $action هو اسم إجراء AJAX، راجع wp_ajax_(action).
Class Example extends WP_AJAX
{
protected $ action = ' example ' ;
protected function run (){
echo " Success! " ;
}
}
بعد ذلك عليك استدعاء الطريقة الثابتة للاستماع (). سيؤدي هذا إلى إنشاء جميع الخطافات حتى يتمكن WordPress من استدعاء طريقة التشغيل () عند الوصول إلى نقطة نهاية AJAX الصحيحة. ملاحظة: ستحتاج إلى استدعاء طريقة الاستماع () لكل إجراء من إجراءات AJAX.
ExampleAJAX:: listen ();
إذا كنت تريد السماح للمستخدمين المسجلين فقط بالوصول إلى نقطة نهاية AJAX الخاصة بك، فأضف الوسيطة FALSE إلى طريقة الاستماع.
ExampleAJAX:: listen ( FALSE );
إذا كنت تريد الرد على طلب AJAX بالبيانات، فستقوم طريقة JSONResponse() تلقائيًا بتعيين رأس نوع المحتوى إلى "application/json" ويقوم JSON بتشفير البيانات المقدمة إلى الطريقة.
أعلم أن WordPress لديه وظيفة تسمى wp_send_json() ولكن نظرًا لحقيقة أنني أعرف مدى إزعاج مطوري WP لأنني قمت بتضمين هذه الطريقة، فلن أقوم بإزالتها.
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