WordPress REST-API deaktivieren reloaded

WordPress Logo

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/

Tobi

Hallo, mein Name ist Tobias und ich habe diesen Blog im April 2009 ins Leben gerufen. Seitdem blogge ich hier über Software, Internet, Windows und andere Themen, die mich interessieren. SSDblog ist mein zweiter Blog, indem es rund um das Thema SSDs geht. Ich würde mich freuen, wenn ihr meinen Feed abonniert oder mir auf Twitter und Facebook folgt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.