更新日期:2021-03-12

在 WordPress 的非同步請求中,常使用 admin-ajax.php 這個方式,直到了 4.4 引入新的 WP REST API。

底下就展示如何寫這兩種方法:

WP-AJAX

// Callback URL
add_action( 'wp_ajax_my_action', 'apiCallback');
add_action( 'wp_ajax_nopriv_my_action', 'apiCallback');

function apiCallback(){
    // xxxxxxx
    wp_die();
}

wp_ajax_($action),是給已登入呼叫, wp_ajax_nopriv_($action) 是給未登入者呼叫的,所以我們可以分別為了這兩種身份寫不同呼叫的 callback function 來用。

這種方式的呼叫網址是這樣子:
https://yoursite.com/wp-admin/admin-ajax.php?action=my_action

WP REST API

add_action('rest_api_init', function () {
    register_rest_route( 'my_api', 'my_route',array(
        'methods'  => 'GET',
        'callback' => 'apiCallback',
        'permission_callback' => '__return_true',
    ));
});

function apiCallback() {
    //xxxxxxxxx
}

REST API 的網址就變成是這樣:
https://yoursite.com/wp-json/my_api/my_route

兩種方式各有優缺點,據國外測試,像是 WP REST API 效能比 WP-Ajax 好一點。不過 WP REST API 返回的資料是 json 格式,若是需要 html 格式倒是使用 WP-Ajax 比較方便了。