Tăng tốc độ xử lý AJAX cho WordPress

Cập nhật lần cuối vào

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.

Tăng tốc độ xử lý AJAX trên WordPress

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.

Theo dõi
Thông báo của
guest

3 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Việt Nguyễn
5 năm trước

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ì 🙁

Hải Lê Mạnh
Hải Lê Mạnh
3 năm trước

file custom-ajax.php tạo ở đâu vậy bạn

Lại Đình Cường
Admin
3 năm trước
Trả lời  Hải Lê Mạnh

Bạn tạo vào thư mục giao diện hoặc plugin của bạn nhé.