WP_AJAX เป็นคลาสสำหรับการเชื่อมต่อกับระบบ AJAX ของ WordPress คลาสนี้ออกแบบมาเพื่อสรุปนักพัฒนาอย่างสมบูรณ์จากระบบที่ใช้ hook แบบดั้งเดิมไปจนถึงโครงสร้างสไตล์คอนโทรลเลอร์ที่สะอาดตา เพียงกำหนดคลาส echo 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
ตัวอย่างAction.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 และกำหนดให้อยู่ที่ด้านบนของไฟล์ function.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! " ;
}
}
ถัดไปคุณต้องเรียกใช้เมธอดคงที่ Listen() สิ่งนี้จะสร้าง hooks ทั้งหมดเพื่อให้ WordPress รู้ว่าจะเรียกใช้เมธอด run() เมื่อถึงจุดสิ้นสุด AJAX ที่ถูกต้อง หมายเหตุ: คุณจะต้องเรียกใช้เมธอด Listen() สำหรับการดำเนินการ AJAX แต่ละรายการของคุณ
ExampleAJAX:: listen ();
หากคุณต้องการอนุญาตให้เฉพาะผู้ใช้ที่ลงชื่อเข้าใช้เข้าถึงตำแหน่งข้อมูล AJAX ของคุณ ให้เพิ่มอาร์กิวเมนต์ FALSE ให้กับวิธีการ Listen
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