WordPress REST-API deaktivieren reloaded
Vor einigen Jahren habe ich in einem Artikel aufgezeigt, wie ihr die WordPress REST-API deaktivieren könnt. Die damals vorgestellte Methode verändert die REST-API so, dass diese nur noch von angemeldeten Benutzern verwendet werden kann. Grundsätzlich eine gute Idee, da WordPress seit einigen Jahren im Core vermehrt auf die REST-API setzt und somit diese Funktionalität erhalten bleibt.
Problematisch bei dieser Variante ist, dass mittlerweile auch immer mehr Plugins von der REST-API abhängig sind und diese dann nicht mehr funktionieren. Beispielsweise gibt es Probleme mit Contact Form 7, Analytics Germanized for Google Analytics und vielen weiteren Plugins.
Ein besserer Ansatz ist daher nur die standardmäßig von WordPress verwendeten REST-API-Endpoints für nicht angemeldete User zu deaktivieren. Alle anderen Third-Party-Endpoints von Plugins funktionieren dann nach wie vor. Alles was ihr tun müsste ist folgenden Code in die “functions.php” eures Themes bzw. Child-Themes einzufügen:
/* ------------------------------------------------------------------------- *
* Disable some REST API endpoints for unauthenticated users
/* ------------------------------------------------------------------------- */
add_filter( 'rest_endpoints', 'disable_default_endpoints' );
function disable_default_endpoints( $endpoints ) {
$endpoints_to_remove = array(
'/oembed/1.0',
'/wp-site-health',
'/wp/v2',
'/wp/v2/media',
'/wp/v2/types',
'/wp/v2/statuses',
'/wp/v2/taxonomies',
'/wp/v2/tags',
'/wp/v2/users',
'/wp/v2/comments',
'/wp/v2/settings',
'/wp/v2/themes',
'/wp/v2/plugins',
'/wp/v2/oembed',
'/wp/v2/posts',
'/wp/v2/pages',
'/wp/v2/block-directory',
'/wp/v2/block-renderer',
'/wp/v2/block-types',
'/wp/v2/blocks',
'/wp/v2/search',
'/wp/v2/categories'
);
if ( ! is_user_logged_in() ) {
foreach ( $endpoints_to_remove as $rem_endpoint ) {
// $base_endpoint = "/wp/v2/{$rem_endpoint}";
foreach ( $endpoints as $maybe_endpoint => $object ) {
if ( stripos( $maybe_endpoint, $rem_endpoint ) !== false ) {
unset( $endpoints[ $maybe_endpoint ] );
}
}
}
}
return $endpoints;
}
Bei Bedarf kann das Array “$endpoints_to_remove” selbstverständlich ergänzt werden.
Eine Liste aller aktiven Endpoints erhaltet ihr mit diesem Link: http://www.MEINESEITE.de/wp-json/
Sie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen
Neueste Kommentare