Thực hiện các lệnh AJAX giúp WordPress tiết kiệm thời gian tải trang. Có thể xử lý các sự kiện sau khi trang đã tải xong thông qua AJAX. Tuy nhiên, mọi công việc thực thi AJAX đều xử lý qua tập tin admin-ajax.php trong thư mục wp-admin của WordPress. Điều này ít nhiều sẽ làm giảm đi tốc độ xử lý AJAX.
Vậy làm thế nào để cải thiện tốc độ thực thi AJAX của WordPress? Nếu bạn đang quan tâm về vấn đề này thì xin mời bạn tiếp tục đọc xuống bên dưới.
Tăng tốc độ xử lý AJAX cho WordPress
Việc tất cả các hàm AJAX đều xử lý thông qua tập tin admin-ajax.php của WordPress sẽ làm chậm đi code của bạn ít nhiều. Để giải quyết vấn đề này thì đơn giản, bạn chỉ cần tạo một tập tin xử lý AJAX riêng, sau đó gửi action đến tập tin này là xong.
Ngay bây giờ, bạn sẽ mở tập tin wp-admin\admin-ajax.php lên và xem nội dung bên trong này có gì? Thật ra đây chỉ là một file PHP độc lập bình thường, nó load thư viện của WordPress thông qua việc gọi tập tin wp-load.php và có load một số thứ liên quan đến admin của WordPress.
Bạn hãy loại bỏ những gì không cần thiết đi. Nếu bạn làm dự án plugin hoặc giao diện WordPress thì bạn sẽ tạo tập tin custom-ajax.php với nội dung như sau:
<?php
define( 'DOING_AJAX', true );
if ( ! defined( 'WP_ADMIN' ) ) {
define( 'WP_ADMIN', true );
}
if ( ! defined( 'WP_USE_THEMES' ) ) {
define( 'WP_USE_THEMES', false );
}
// Fake wp-admin url
$_SERVER['PHP_SELF'] = '/wp-admin/';
$path = dirname( __FILE__ );
$path = substr( $path, 0, strpos( $path, 'wp-content' ) );
/** Load WordPress Bootstrap */
require_once( $path . 'wp-load.php' );
/** Allow for cross-domain requests (from the front end). */
if ( ! function_exists( 'send_origin_headers' ) ) {
require_once ABSPATH . WPINC . '/link-template.php';
require_once ABSPATH . WPINC . '/http.php';
}
send_origin_headers();
// Require an action parameter
if ( empty( $_REQUEST['action'] ) ) {
wp_die( '0', 400 );
}
/** Load WordPress Administration APIs */
require_once( ABSPATH . 'wp-admin/includes/admin.php' );
/** Load Ajax Handlers for WordPress Core */
require_once( ABSPATH . 'wp-admin/includes/ajax-actions.php' );
@header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
@header( 'X-Robots-Tag: noindex' );
send_nosniff_header();
nocache_headers();
/** This action is documented in wp-admin/admin.php */
//do_action( 'admin_init' );
if ( is_user_logged_in() ) {
// If no action is registered, return a Bad Request response.
if ( ! has_action( 'wp_ajax_' . $_REQUEST['action'] ) ) {
wp_die( '0', 400 );
}
/**
* Fires authenticated Ajax actions for logged-in users.
*
* The dynamic portion of the hook name, `$_REQUEST['action']`,
* refers to the name of the Ajax action callback being fired.
*
* @since 2.1.0
*/
do_action( 'wp_ajax_' . $_REQUEST['action'] );
} else {
// If no action is registered, return a Bad Request response.
if ( ! has_action( 'wp_ajax_nopriv_' . $_REQUEST['action'] ) ) {
wp_die( '0', 400 );
}
/**
* Fires non-authenticated Ajax actions for logged-out users.
*
* The dynamic portion of the hook name, `$_REQUEST['action']`,
* refers to the name of the Ajax action callback being fired.
*
* @since 2.8.0
*/
do_action( 'wp_ajax_nopriv_' . $_REQUEST['action'] );
}
// Default status
wp_die( '0' );
Ngoài ra, nếu như bạn làm dự án PHP thuần không liên quan đến WordPress, nhưng bạn muốn dùng các hàm trong nhân của WordPress thì có thể tạo tập tin tương tự và dùng hằng SHORTINIT. Bên cạnh đó, bạn hoàn toàn có thể xóa đi các thứ liên quan đến admin trong tập tin bạn vừa tạo bên trên.
Sau này, khi thực thi AJAX trong Javascript thì bạn chỉ cần lấy url của tập tin custom-ajax.php thay vì admin-ajax.php như thông thường. Bạn có thể xem thêm bài viết sử dụng AJAX trong WordPress mình đã viết trước đó để hiểu rõ hơn về cách hoạt động. Chúc bạn thành công.
Ad có bài viết nào hướng dẫn viết ajax không ? Mình tìm trên mạng mãi mà chẳng hiểu gì 🙁
file custom-ajax.php tạo ở đâu vậy bạn
Bạn tạo vào thư mục giao diện hoặc plugin của bạn nhé.