WordPress
カスタマイズ事例

WORDPRESS CUSTOMIZATION

WP REST API から記事やユーザー情報を取得できないようにする

WordPressは WP REST API という外部からhttp通信でデータを取得・送信できる仕組みを内部に実装しました。
たとえば、以下のサイトにアクセスすれば当サイトのユーザー一覧情報が見られます。

https://100webdesign.jp/wp-json/wp/v2/users

同様に、当サイトの投稿の一覧情報が欲しければ以下にアクセスすれば見られます。

https://100webdesign.jp/wp-json/wp/v2/posts

ほうほう。

ん?

と思った方、いますよね。
投稿は別に良いとしても、WordPressの管理画面のユーザーIDばれちゃってんじゃん。
そうです。WordPressにおいて管理画面のユーザーIDは公開情報に属します。
だから何もしなければ、誰でも見られる状態なのです。

インターネットが始まって以来あまたの会員サイトが生まれてますが、そもそもログインのIDとパスワードが分かれているのは、IDは公開情報だからだってご存知でした?そうです、公開情報なんですよ。
WordPressもその考え方に則ってIDは晒しちゃっているわけですが、なんか気持ち悪い感がぬぐえないという方いますよね。
REST API からも情報見られないようにできるならそうしたいという方。

テーマのfunctions.php に次のように記述してください。

function kaiza_filter_rest_endpoints( $endpoints ) {
    /* REST APIで投稿一覧取得を無効にする */
    if ( isset( $endpoints['/wp/v2/posts'] ) ) {
        unset( $endpoints['/wp/v2/posts'] );
    }
    /* REST APIで投稿記事取得(単記事)を無効にする */
    if ( isset( $endpoints['/wp/v2/posts/(?P<id>[\d]+)'] ) ) {
        unset( $endpoints['/wp/v2/posts/(?P<id>[\d]+)'] );
    }
    /* REST APIでページ一覧取得を無効にする */
    if (isset($endpoints['/wp/v2/pages'])) {
      unset($endpoints['/wp/v2/pages']);
    }
    /* REST APIでページ取得(単記事)を無効にする */
    if (isset($endpoints['/wp/v2/pages/(?P<id>[\d]+)'])) {
      unset($endpoints['/wp/v2/pages/(?P<id>[\d]+)']);
    }
    /* REST APIでユーザー情報取得を無効にする */
    if ( isset( $endpoints['/wp/v2/users'] ) ) {
        unset( $endpoints['/wp/v2/users'] );
    }
    if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) {
        unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
    }
    return $endpoints;
}
add_filter( 'rest_endpoints', 'kaiza_filter_rest_endpoints', 10, 1 );

これで、WP REST API から情報を抜かれることはありません。
(上の記述はユーザー情報と投稿情報と固定ページの情報を遮断する記述になっているので、ご自身の判断で書き換えて使ってください)

【100ウェブ新着情報メルマガ】

WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!