W tym bardzo krótkim wpisie przedstawimy sposób na ukrycie domyślnie publicznie dostępnych endpointów w Wordpressie przed wścibskimi, niezalogowanymi użytkownikami.
Aby pozwolić wyłącznie zalogowanym użytkownikom podejrzeć endpointy generowane przez WP, należy dodać poniższy kod:
function mytheme_only_allow_logged_in_rest_access( $access ) {
if( ! is_user_logged_in() ) {
return new WP_Error(
'rest_cannot_access',
__( 'Only authenticated users can access the REST API.', 'disable-json-api' ),
array('status' => rest_authorization_required_code())
);
}
return $access;
}
add_filter( 'rest_authentication_errors', 'mytheme_only_allow_logged_in_rest_access' );
Wersja z dostępem dla administratorów
function mytheme_only_allow_logged_in_rest_access( $access ) {
if( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) {
return new WP_Error( 'rest_cannot_access', __( 'Only authenticated users can access the REST API.', 'disable-json-api' ), array( 'status' => rest_authorization_required_code() ) );
}
return $access;
}
add_filter( 'rest_authentication_errors', 'mytheme_only_allow_logged_in_rest_access' );
List domyślnych endpointów
add_filter( 'rest_endpoints', 'show_default_endpoints' );
function show_default_endpoints( $endpoints ) {
var_export( array_keys( $endpoints ) );
die;
}
Usuwanie tylko domyślnych endpointów
add_filter( 'rest_endpoints', 'remove_default_endpoints' );
function remove_default_endpoints( $endpoints ) {
return array( );
}