Solución:
De la pregunta original del autor, elegí la opción 2 que provino de las recomendaciones oficiales de wordpress (https://developer.wordpress.org/rest-api/using-the-rest-api/frently-asked-questions/#can-i -deshabilitar-el-resto-api). Así que solo ingrese su functions.php para permitir que solo los usuarios que hayan iniciado sesión usen el resto de la API:
add_filter( 'rest_authentication_errors', function( $result ) {
if ( ! empty( $result ) ) {
return $result;
}
if ( ! is_user_logged_in() ) {
return new WP_Error( 'rest_not_logged_in', 'You are not currently logged in.', array( 'status' => 401 ) );
}
return $result;
});
Puede deshabilitarlo para solicitudes que no sean localhost:
function restrict_rest_api_to_localhost() {
$whitelist = [ '127.0.0.1', "::1" ];
if( ! in_array($_SERVER['REMOTE_ADDR'], $whitelist ) ){
die( 'REST API is disabled.' );
}
}
add_action( 'rest_api_init', 'restrict_rest_api_to_localhost', 0 );
Deshabilitar la API REST no fue una mala idea, después de todo. ¡De hecho, abrió un gran agujero en todos los sitios web!
En wordpress 4.4 había una forma
Aquí, he encontrado una posible solución con .htaccess
pero debe probarse cuidadosamente en combinación con cualquier otra cosa que se encuentre en su .htaccess
archivo (por ejemplo, reglas de pretty-url agregadas por el propio wordpress):
# WP REST API BLOCK JSON REQUESTS
# Block/Forbid Requests to: /wp-json/wp/
# WP REST API REQUEST METHODS: GET, POST, PUT, PATCH, DELETE
RewriteCond %{REQUEST_METHOD} ^(GET|POST|PUT|PATCH|DELETE) [NC]
RewriteCond %{REQUEST_URI} ^.*wp-json/wp/ [NC]
RewriteRule ^(.*)$ - [F]
Un método muy drástico, es también tener un 404.html
página web en su raíz y luego agregue esta línea:
# WP REST API BLOCK JSON REQUESTS
# Redirect to a 404.html (you may want to add a 404 header!)
RewriteRule ^wp-json.*$ 404.html
Tenga en cuenta que, a menos que utilice una página estática, es decir, no involucrado con wordpress funciones, si desea devolver un 404
error con una página de error apropiada, este es un tema completamente separado, con muchos problemas cuando Wordpress está involucrado