REST API包含一个JavaScript / Backbone客户端库。 该库为WP REST API提供了一个界面,为所有展现API模式的端点提供了骨干模型和集合。 ##使用 激活WP-API插件。 直接排队脚本: ``` wp_enqueue_script( 'wp-api' ); ``` 或作为脚本的依赖: ``` wp_enqueue_script( 'my_script', 'path/to/my/script', array( 'wp-api' ) ); ``` 库解析根端点(“Schema”)并创建匹配的Backbone模型和集合。 你现在可以有两个根对象:`wp.api.models`和`wp.api.collections`。 模型和收藏包括: 模型: * Category * Comment * Media * Page * PageMeta * PageRevision * Post * PostMeta * PostRevision * Schema * Status * Tag * Taxonomy * Type * User Collections: * Categories * Comments * Media * PageMeta * PageRevisions * Pages * Posts * Statuses * Tags * Taxonomies * Types * Users 您可以使用这些端点来使用标准的Backbone方法来读取,更新,创建和删除项目(获取,同步,保存和销毁模型,同步收集)。 您还可以扩展这些对象,使其成为您自己的,并在其上构建您的视图。 ## Default values 每个模型和集合都包含对其默认值的引用,例如: wp.api.models.Post.prototype.args * author: null * comment_status: null * content: null * date: null * date_gmt: null * excerpt: null * featured_image: null * format: null * modified: null * modified_gmt: null * password: null * ping_status: null * slug: null * status: null * sticky: null * title: null ## 可用的方法 每个模型和集合都包含相应端点支持的方法列表。 例如,从`wp.api.models.Post`创建的模型有一个方法数组: ``` ["GET", "POST", "PUT", "PATCH", "DELETE"] ``` ## 接受的选项 每个模型和集合包含相应端点接受的选项列表(注意,在创建模型或集合时,选项作为第二个参数传递),例如: ``` wp.api.collections.Posts.prototype.options * author * context * filter * order * orderby * page * per_page * search * status ``` ## 本地化API模式 客户端将接受并使用本地化模式作为“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)。 ## 等待客户端加载 客户端启动是异步的。 如果api模式是本地化的,客户端可以立即启动; 如果客户端不是ajax请求来加载模式。 客户端公开了一个负担承诺,提供可靠的等待,等待客户端准备好: ``` wp.api.loadPromise.done( function() { //... use the client here } ) ``` ## 模型示例: 要创建一个帖子并修改其类别,请确保您已登录,然后: ``` // Create a new post var post = new wp.api.models.Post( { title: 'This is a test post' } ); post.save(); // Load an existing post var post = new wp.api.models.Post( { id: 1 } ); post.fetch(); // Get a collection of the post's categories (returns a promise) // Uses _embedded data if available, in which case promise resolves immediately. post.getCategories().done( function( postCategories ) { // ... do something with the categories. // The new post has an single Category: Uncategorized console.log( postCategories[0].name ); // response -> "Uncategorized" } ); // Get a posts author User model. post.getAuthorUser().done( function( user ){ // ... do something with user console.log( user.get( 'name' ) ); } ); // Get a posts featured image Media model. post.getFeaturedImage().done( function( image ){ // ... do something with image console.log( image ); } ); // Set the post categories. post.setCategories( [ 'apples', 'oranges' ] ); // Get all the categories var allCategories = new wp.api.collections.Categories() allCategories.fetch(); var appleCategory = allCategories.findWhere( { slug: 'apples' } ); // Add the category to the postCategories collection we previously fetched. appleCategory.set( 'parent_post', post.get( 'id' ) ); // Use the POST method so Backbone will not PUT it even though it has an id. postCategories.create( appleCategory.toJSON(), { type: 'POST' } ); // Remove the Uncategorized category postCategories.at( 0 ).destroy(); // Check the results - re-fetch postCategories = post.getCategories(); postCategories.at( 0 ).get( 'name' ); // response -> "apples" ``` ## 集合示例: 得到最后10个帖子: ``` var postsCollection = new wp.api.collections.Posts(); postsCollection.fetch(); ``` 获取最后25个帖子: ``` postsCollection.fetch( { data: { per_page: 25 } } ); ``` 使用过滤器更改订单和orderby选项: ``` postsCollection.fetch( { data: { 'filter': { 'orderby': 'title', 'order': 'ASC' } } } ); ``` 所有收藏都自动支持分页,您可以使用`more`获得下一页结果: ``` postsCollection.more(); ``` 获取一个集合的第5页: ``` posts.fetch( { data: { page: 5 } } ); ``` 检查收集是否有更多的帖子: ``` posts.hasMore(); ``` ## 使用修订 您可以使用PostRevisions或PageRevisions集合或通过Post或页面集合访问帖子或页面修订。 例如,要获取所有版本的帖子ID 1的集合: ``` var revisions = new wp.api.collections.PostRevisions({}, { parent: 1 }); ``` 修订集合也可以通过父母的收藏进行访问。 这个例子使得2个HTTP请求而不是一个HTTP请求,但现在可以使用原始帖子及其修订版本: ``` var post = new wp.api.models.Post( { id: 1 } ); post.fetch(); post.getRevisions().done( function( revisions ){ console.log( revisions ); }); ``` 如果您将自定义端点添加到api,它们也将作为模型/集合使用。 例如,当您[为您的自定义帖子类型添加REST API支持](http://v2.wp-api.org/extending/custom-content-types/)时,您将获得新的模型和集合。 注意:由于模式存储在用户的会话缓存中以避免重新获取,因此您可能需要打开一个新的选项卡才能对Schema进行新的读取。