使用

WP-API プラグインを有効にします。スクリプトを直接エンキューします:

  1. wp_enqueue_script( 'wp-api' );

または、スクリプトの依存関係として:

  1. wp_enqueue_script( 'my_script', 'path/to/my/script', array( 'wp-api' ) );

ライブラリはルートエンドポイント(「スキーマ」)を解析し、一致する Backbone モデルとコレクションを作成します。これで、wp.api.modelswp.api.collections の 2 つのルートオブジェクトが利用可能になります。

モデルとコレクションには次のものが含まれます:

モデル:

  • カテゴリー

  • コメント

  • メディア

  • ページ

  • ページメタ

  • ページリビジョン

  • 投稿

  • 投稿メタ

  • 投稿リビジョン

  • スキーマ

  • ステータス

  • タグ

  • タクソノミー

  • タイプ

  • ユーザー

コレクション:

  • カテゴリー

  • コメント

  • メディア

  • ページメタ

  • ページリビジョン

  • ページ

  • 投稿

  • ステータス

  • タグ

  • タクソノミー

  • タイプ

  • ユーザー

これらのエンドポイントをそのまま使用して、標準の Backbone メソッド(モデル用の fetch、sync、save & destroy、コレクション用の sync)を使用してアイテムを読み取り、更新し、作成し、削除できます。また、これらのオブジェクトを拡張して独自のものにし、それらの上にビューを構築することもできます。

デフォルト値

各モデルとコレクションには、そのデフォルト値への参照が含まれています。例えば:

  1. - author: null
  2. - comment_status: null
  3. - content: null
  4. - date: null
  5. - date_gmt: null
  6. - excerpt: null
  7. - featured_image: null
  8. - format: null
  9. - modified: null
  10. - modified_gmt: null
  11. - password: null
  12. - ping_status: null
  13. - slug: null
  14. - status: null
  15. - sticky: null
  16. - title: null
  17. <a name="available-methods"></a>
  18. ### 利用可能なメソッド
  19. 各モデルとコレクションには、対応するエンドポイントがサポートするメソッドのリストが含まれています。例えば、`````wp.api.models.Post````` から作成されたモデルには、次のメソッドの配列があります:
  20. ``````bash
  21. ["GET", "POST", "PUT", "PATCH", "DELETE"]
  22. `

受け入れられるオプション

各モデルとコレクションには、対応するエンドポイントが受け入れるオプションのリストが含まれています(オプションはモデルやコレクションを作成する際に第二引数として渡されることに注意してください)。例えば:

  1. - author
  2. - context
  3. - filter
  4. - order
  5. - orderby
  6. - page
  7. - per_page
  8. - search
  9. - status
  10. <a name="localizing-the-api-schema"></a>
  11. ### API スキーマのローカライズ
  12. クライアントは、`````wpApiSettings````` オブジェクトの一部としてローカライズされたスキーマを受け入れ、使用します。スキーマは現在デフォルトで渡されません。代わりに、クライアントはスキーマをロードするために API AJAX リクエストを行い、その後ブラウザのセッションストレージにキャッシュします(利用可能な場合)。`````SCRIPT_DEBUG````` を有効にした client-js プラグインをアクティブにすると、ローカライズされたスキーマが使用されます。[client-js の例](https://github.com/WP-API/client-js/blob/master/client-js.php) または、[クライアントごとにスキーマを一度だけローカライズしようとするこのブランチ](https://github.com/WP-API/client-js/compare/features/only-localize-schma-once?expand=1)を確認してください。
  13. <a name="waiting-for-the-client-to-load"></a>
  14. ### クライアントの読み込みを待つ
  15. クライアントの起動は非同期です。API スキーマがローカライズされている場合、クライアントはすぐに起動できます。そうでない場合、クライアントはスキーマをロードするために AJAX リクエストを行います。クライアントは、クライアントが準備が整うのを待つための信頼できる待機を提供するロードプロミスを公開します:
  16. ``````bash
  17. wp.api.loadPromise.done( function() {
  18. //... use the client here
  19. } )
  20. `

モデルの例:

投稿を作成し、そのカテゴリを編集するには、ログインしていることを確認し、次に:

  1. // Create a new post
  2. var post = new wp.api.models.Post( { title: 'This is a test post' } );
  3. post.save();
  4. // Load an existing post
  5. var post = new wp.api.models.Post( { id: 1 } );
  6. post.fetch();
  7. // Get a collection of the post's categories (returns a promise)
  8. // Uses _embedded data if available, in which case promise resolves immediately.
  9. post.getCategories().done( function( postCategories ) {
  10. // ... do something with the categories.
  11. // The new post has an single Category: Uncategorized
  12. console.log( postCategories[0].name );
  13. // response -> "Uncategorized"
  14. } );
  15. // Get a posts author User model.
  16. post.getAuthorUser().done( function( user ){
  17. // ... do something with user
  18. console.log( user.get( "name" ) );
  19. } );
  20. // Get a posts featured image Media model.
  21. post.getFeaturedMedia().done( function( image ){
  22. // ... do something with image
  23. console.log( image );
  24. } );
  25. // Set the post categories.
  26. post.setCategories( [ "apples", "oranges" ] );
  27. // Get all the categories
  28. var allCategories = new wp.api.collections.Categories()
  29. allCategories.fetch();
  30. var appleCategory = allCategories.findWhere( { slug: "apples" } );
  31. // Add the category to the postCategories collection we previously fetched.
  32. appleCategory.set( "parent_post", post.get( "id" ) );
  33. // Use the POST method so Backbone will not PUT it even though it has an id.
  34. postCategories.create( appleCategory.toJSON(), { type: "POST" } );
  35. // Remove the Uncategorized category
  36. postCategories.at( 0 ).destroy();
  37. // Check the results - re-fetch
  38. postCategories = post.getCategories();
  39. postCategories.at( 0 ).get( "name" );
  40. // response -> "apples"

コレクションの例:

最後の 10 件の投稿を取得するには:

  1. var postsCollection = new wp.api.collections.Posts();
  2. postsCollection.fetch();

最後の 25 件の投稿を取得するには:

  1. postsCollection.fetch( { data: { per_page: 25 } } );

フィルターを使用して、order & orderby オプションを変更します:

  1. postsCollection.fetch( { data: { 'filter': { 'orderby': 'title', 'order': 'ASC' } } } );

すべてのコレクションは自動的にページネーションをサポートし、more を使用して次のページの結果を取得できます:

  1. postsCollection.more();

コレクションのページ 5 を取得するには:

  1. posts.fetch( { data: { page: 5 } } );

コレクションにさらに投稿があるか確認するには:

  1. posts.hasMore();

リビジョンの操作

投稿またはページのリビジョンには、PostRevisions または PageRevisions コレクションを使用するか、Post または Page コレクションを通じてアクセスできます。

例えば、投稿 ID 1 のすべてのリビジョンのコレクションを取得するには:

  1. var revisions = new wp.api.collections.PostRevisions({}, { parent: 1 });

リビジョンコレクションは、その親のコレクションを介してもアクセスできます。この例では、1 回のリクエストではなく 2 回の HTTP リクエストが行われますが、元の投稿とそのリビジョンが利用可能になります:

  1. var post = new wp.api.models.Post( { id: 1 } );
  2. post.fetch();
  3. post.getRevisions().done( function( revisions ){
  4. console.log( revisions );
  5. });

API にカスタムエンドポイントを追加すると、それらもモデル/コレクションとして利用可能になります。例えば、カスタム投稿タイプに REST API サポートを追加すると、新しいモデルとコレクションが得られます。作成したカスタムエンドポイントにアクセスするには、アイテムの JSON エンドポイント名を CamelCase で使用します。例えば、アイテムが /wp-json/wp/v2/my-custom-post の JSON パスにある場合、wp.api.collections.MyCustomPost で API にアクセスできます。注意: スキーマは再取得を避けるためにユーザーのセッションキャッシュに保存されるため、新しいスキーマの読み取りを取得するには新しいタブを開く必要があるかもしれません。

  1. // Extend wp.api.models.Post and wp.api.collections.Posts to load a custom post type
  2. const CustomPost = wp.api.models.Post.extend( {
  3. urlRoot: wpApiSettings.root + 'wp/v2/custom_post_slug',
  4. defaults: {
  5. type: 'custom_post_slug',
  6. },
  7. } );
  8. const CustomPosts = wp.api.collections.Posts.extend( {
  9. url: wpApiSettings.root + 'wp/v2/custom_post_slug',
  10. model: BLProduct,
  11. } );
  12. const someCustomPosts = new CustomPosts();
  13. someCustomPosts.fetch().then( ( posts ) => {
  14. // do something with the custom posts
  15. } );