デフォルトのWordPressRESTAPIルートとエンドポイントを削除する方法

公開: 2018-07-31

WordPress REST APIは、2016年12月にバージョン4.7(Vaughan)でコアに導入されました。WPコアで行われた他の重要な変更と同様に、激しい議論が行われました(現時点では、2018年7月、Gutenbergがそのような議論の対象となっています/論争)。 結局、何も起こりませんでした。 RESTAPIを気にしなかった人はまだ気にしません。 気になる人は、いくつかのアプリ、統合、プラグイン、その他のクールなプロジェクトを作成しました。

#wordpress REST APIがv4.7コアにマージされていたとき、人々はびっくりしていました! 何か変化が起こったときに彼らがびっくりするのと同じです。 結局、それはすべてうまくいきます。

クリックしてツイート

そして、私たちがクールなプロジェクトのトピックに取り組んでいる間。 最も成功しているものは、近日公開のページから始まることをご存知ですか? また、多くの場合、Coming Soon&MaintenanceModeプラグインを使用して作成された近日公開のページです。

近日公開&メンテナンスモード

このプラグインには、ドラッグアンドドロップビルダー、170以上のテーマ、クラス最高のSEOセットアップ、オートレスポンダーと電子メールサービス、および数分で完璧な近日公開のページを作成できるその他の多くの機能が付属しています。 さらに、プラグインはプラグインと統合されているため、プラグインから直接最高のビジュアルを見つけることができます。 しかし、コレクションのファンでない場合は、YayImagesはストックコンテンツの優れたソースでもあります。

しかし、それについては十分ですが、メイントピックであるRESTAPIに戻りましょう。

私たちはRESTAPIに関心を持っており、WPを利用したSaaSを構築するときにそれを利用します。 安定していて、高速で、操作が簡単で、WPにぴったりと収まり、ほとんどの場合、十分に文書化されています。 REST APIが何であるかわからない場合、これはおそらくあなたのための投稿ではありませんが、REST API(ビデオとテキスト)が何であるかを確認してください。次のプロジェクトで使用する可能性があります。

ルート? 終点? それはすべて同じではありませんか?

いいえ、同じではありません。 ほとんどの人にとって違いは微妙であり、ルートとエンドポイントという用語を同じ意味で使用しますが、それほど複雑ではありません。 ルートは多かれ少なかれURLです。 これは、エンドポイントにアクセスするために使用される「名前」です。 使用するエンドポイントは使用するHTTPリクエストの種類によって異なるため、1つのルートで複数のエンドポイントを使用できます。 GETPOSTPUT 、またはDELETEは、さまざまな目的を果たすことができ、通常は機能します。 GET経由でyoursite.com/wp-json/v2/posts/1にアクセスすると、ID#1の投稿の詳細が表示されます。 同じルートでDELETEを使用すると、その投稿を削除する別のエンドポイント(または必要に応じて関数)が呼び出されます。 公式のRESTAPIハンドブックには、このテーマに関する詳細が記載されているので、詳細を確認してください。

#wordpress REST APIルートとエンドポイントは同じものではありません! ルートは、エンドポイントにアクセスするために使用される「名前」です。 通常、単一のルートは複数のエンドポイントに関連付けられます。

クリックしてツイート

デフォルトのWPRESTAPIエンドポイントまたはルートを削除するのはなぜですか?

デフォルトの書き換えルールの削除に関する記事で説明したように、WordPress開発者がこれを行う理由は100あります。
「これらすべてのエンドポイントを解析する必要がないため、WordPressが高速になります。」 それでも私は同意せず、ゲインは1ミリ秒未満になると信じていますが、害はありません。

あなたは物事をきれいに保つのが好きで、REST APIを使用していないので、なぜAPIルートがあるのですか? 確かに、理にかなっています。 ただし、その場合は、プラグインを使用してRESTAPIを完全に無効にします。

そして、デフォルトルート(およびエンドポイント)を無効にする理由があります。 カスタムRESTAPIエンドポイントを多用していますが、デフォルトのエンドポイントは必要ありません。 したがって、物事を無駄のない清潔な状態に保つのは良いことです。 また、過酷な外の世界に公開するデータの数が少ないため、セキュリティを損なうことはありません。

デフォルトのAPIエンドポイントを表示してください

エンドポイントリファレンスは、RESTAPIハンドブックで入手できます。 多かれ少なかれ、公開されているデータは、RESTAPIを介して利用できるようになります。 demo.wp-api.org/wp-json/wp/v2/postsへのリクエスト例では、10個の投稿がJSON形式で表示されます。 その応答の人間が読めるバージョンが必要な場合は、JSON応答をデコードする必要があります。 ページ、カテゴリ、その他のデータ構造についても同じことが言えます。 参照を参照するとわかるように、データ構造とエンドポイントは非常に似ています。

デフォルトルートを確認するもう1つの方法は、このコードをテーマのfunctions.phpファイルに追加してから、yoursite.com /wp-json/を開くことです。 まだ有効にしていない場合は、きれいなリンクを有効にします。

add_filter( 'rest_endpoints', 'show_default_endpoints' );
 
function show_default_endpoints( $endpoints ) { 
  var_export( array_keys( $endpoints ) );
  die;
}

デフォルトの31個のRESTエンドポイントが表示されます。 もちろん、この数は、新しいコア機能が追加されるにつれて変更される可能性があります。 また、カスタムエンドポイントを追加するプラグインがある場合は異なります。

デフォルトのエンドポイントを削除する

上記のコードは最小限の変更で済みます。 空の配列を返すと、すべてのエンドポイントがなくなります。

add_filter( 'rest_endpoints', 'remove_default_endpoints' );
 
function remove_default_endpoints( $endpoints ) { 
  return array( );
}

「すべてのエンドポイント」にはカスタムエンドポイントも含まれるため、削除しないことをお勧めします。 それらをアクティブに保つ簡単な方法は次のとおりです。

add_filter( 'rest_endpoints', 'remove_default_endpoints_smarter' );
 
function remove_default_endpoints_smarter( $endpoints ) { 
  $prefix = 'your_custom_endpoint_prefix';

  foreach ( $endpoints as $endpoint => $details ) {
    if ( !fnmatch( '/' . $prefix . '/*', $endpoint, FNM_CASEFOLD ) ) {
      unset( $endpoints[$endpoint] );
    }
  }

  return $endpoints;
}

カスタムプレフィックスを持つエンドポイントをスキップして、配列に保持するだけです。 配列を返すことを忘れないでください。

RESTURLプレフィックスのカスタマイズ

カスタムエンドポイントは、カスタムであるにもかかわらず、デフォルトのエンドポイントと同じプレフィックスを使用します。 それらはmysite.com/wp-json/custom-endpoint/のように見えます。 たぶん、あなたはそれを醜いと思うか、デフォルトのものが好きではありません。 それを変更するのは1行のコードの問題です。 テストの目的で、以下のコードをテーマのfunctions.phpに配置し、開いているダッシュボード–設定–パーマリンクを保存した後、書き換えルールをフラッシュします。

add_filter( 'rest_url_prefix', 'rest_url_prefix' );

function rest_url_prefix( ) {
  return 'api';
}

上記のフィルターを使用すると、エンドポイントはmysite.com/api/custom-endpoint/になり、古いmysite.com/wp-json/custom-endpoint/URLを開くと404エラーが発生します。

プレフィックスはWPによって自動的に追加されないため、カスタムエンドポイントにバージョン番号を含めるようにしてください。 バージョン番号プレフィックスは、将来の変更が古いエンドポイントを使用するクライアントを壊さないことを保証します。 register_rest_route()を呼び出すときにバージョンプレフィックスを含めるだけで、mysite.com / api / v1 / custom-endpoint /のようなものを取得し、すべてのエンドポイントをその「v1」の背後に保持して、後で「v2」などを使用できるようにします。

変更をテストする

REST APIルートとエンドポイントを削除または変更しても、WPサイトの98%で違いはありません。 "なぜ?" –彼らはRESTAPIをまったく使用していないためです。 ただし、もしあなたがそうするなら、接続されたアプリをテストすることを忘れないでください。すべての場合と同様に、変更は物事を壊す可能性があるからです。 そして、明日よりも今日の方がバグを見つけたほうがいいです。