WordPress 完全禁用 REST API

直接将以下代码添加到主题的 functions.php 文件中即可禁用 JSON REST API :

/**
* WordPress 完全禁用 REST API
* 屏蔽 REST API
*/

if ( version_compare( get_bloginfo( 'version' ), '4.7', '>=' ) ) {
    function lxtx_disable_rest_api( $access ) {
        return new WP_Error( 'rest_api_cannot_acess', '无访问权限', array( 'status' => rest_authorization_required_code() ) );
    }
    add_filter( 'rest_authentication_errors', 'lxtx_disable_rest_api' );
} else {
    // Filters for WP-API version 1.x
    add_filter( 'json_enabled', '__return_false' );
    add_filter( 'json_jsonp_enabled', '__return_false' );
    // Filters for WP-API version 2.x
    add_filter( 'rest_enabled', '__return_false' );
    add_filter( 'rest_jsonp_enabled', '__return_false' );
}
// 移除头部 wp-json 标签和 HTTP header 中的 link
remove_action('template_redirect', 'rest_output_link_header', 11 );
remove_action('wp_head', 'rest_output_link_wp_head', 10 );
remove_action('xmlrpc_rsd_apis', 'rest_output_rsd');

对于 WP 4.7 以上版本,还有种通过rest_api_init这个钩子来禁用 REST API 的方法:


/*禁用未登录的用户*/
add_filter( 'rest_api_init', 'lxtx_rest_only_for_authorized_users', 99 );
function lxtx_rest_only_for_authorized_users($wp_rest_server){
    if ( !is_user_logged_in() ) {
        wp_die('非法操作!');
    }
}