我正在与https://github.com/WP-API/WP-API作斗争我正在尝试使用名为listing_categy的自定义分类法添加自定义帖子类型:查询此终结点:
http://example.com/subfolder/wp-json/taxonomies/listing_categy/terms
给我这个:
[ { "ID": 9, "name": "buying", "slug": "buying-2", "description": "", "parent": null, "count": 1, "link": "http:\/\/example.com\/subfolder\/listing_categy\/buying-2\/", "meta": { "links": { "collection": "http:\/\/example.com\/subfolder\/wp-json\/taxonomies\/listing_categy\/terms", "self": "http:\/\/example.com\/subfolder\/wp-json\/taxonomies\/listing_categy\/terms\/7" } } }, { "ID": 10, "name": "selling", "slug": "selling-2", "description": "", "parent": null, "count": 0, "link": "http:\/\/example.com\/subfolder\/listing_categy\/selling-2\/", "meta": { "links": { "collection": "http:\/\/example.com\/subfolder\/wp-json\/taxonomies\/listing_categy\/terms", "self": "http:\/\/example.com\/subfolder\/wp-json\/taxonomies\/listing_categy\/terms\/8" } } } ]处理发布的php文件是https://github.com/WP-API/WP-API/blob/master/lib/class-wp-json-posts.php :
/** * Create a new post for any registered post type. * * @since 3.4.0 * @internal 'data' is used here rather than 'content', as get_default_post_to_edit uses $_REQUEST['content'] * * @param array $content Content data. Can contain: * - post_type (default: 'post') * - post_status (default: 'draft') * - post_title * - post_author * - post_excerpt * - post_content * - post_date_gmt | post_date * - post_format * - post_password * - comment_status - can be 'open' | 'closed' * - ping_status - can be 'open' | 'closed' * - sticky * - post_thumbnail - ID of a media item to use as the post thumbnail/featured image * - custom_fields - array, with each element containing 'key' and 'value' * - terms - array, with taxonomy names as keys and arrays of term IDs as values * - terms_names - array, with taxonomy names as keys and arrays of term names as values * - enclosure * - any other fields supported by wp_insert_post() * @return array Post data (see {@see WP_JSON_Posts::get_post}) */ public function new_post( $data ) { unset( $data['ID'] ); $result = $this->insert_post( $data ); if ( $result instanceof WP_Error ) { return $result; } $response = json_ensure_response( $this->get_post( $result ) ); $response->set_status( 201 ); $response->header( 'Location', json_url( '/posts/' . $result ) ); return $response; }我已经尝试将json发送到/ posts并且它适用于所有条款......
我已经尝试了以下所有方法:这个:
"title": $scope.listobject.listname, "status": "publish", "slug": "selling","type": "listing", "post_meta": $scope.dataform, "terms": { "listing_categy": [9] }这个:
"title": $scope.listobject.listname, "status": "publish", "slug": "selling","type": "listing", "post_meta": $scope.dataform, "terms": { "listing_categy": [ {"ID": 9 } ]}这个:
"title": $scope.listobject.listname, "status": "publish", "slug": "selling","type": "listing", "post_meta": $scope.dataform, "terms": { "listing_categy": [9, 10 ] }这个:
"terms_names": { "listing_categy": ["selling", "buying"] }文档很糟糕
I'm fighting with https://github.com/WP-API/WP-API I'm trying to add in a custom post type with a custom taxonomy called listing_categy: Querying this endpoint:
http://example.com/subfolder/wp-json/taxonomies/listing_categy/terms
gives me this:
[ { "ID": 9, "name": "buying", "slug": "buying-2", "description": "", "parent": null, "count": 1, "link": "http:\/\/example.com\/subfolder\/listing_categy\/buying-2\/", "meta": { "links": { "collection": "http:\/\/example.com\/subfolder\/wp-json\/taxonomies\/listing_categy\/terms", "self": "http:\/\/example.com\/subfolder\/wp-json\/taxonomies\/listing_categy\/terms\/7" } } }, { "ID": 10, "name": "selling", "slug": "selling-2", "description": "", "parent": null, "count": 0, "link": "http:\/\/example.com\/subfolder\/listing_categy\/selling-2\/", "meta": { "links": { "collection": "http:\/\/example.com\/subfolder\/wp-json\/taxonomies\/listing_categy\/terms", "self": "http:\/\/example.com\/subfolder\/wp-json\/taxonomies\/listing_categy\/terms\/8" } } } ]the php file that handles the posting is this https://github.com/WP-API/WP-API/blob/master/lib/class-wp-json-posts.php :
/** * Create a new post for any registered post type. * * @since 3.4.0 * @internal 'data' is used here rather than 'content', as get_default_post_to_edit uses $_REQUEST['content'] * * @param array $content Content data. Can contain: * - post_type (default: 'post') * - post_status (default: 'draft') * - post_title * - post_author * - post_excerpt * - post_content * - post_date_gmt | post_date * - post_format * - post_password * - comment_status - can be 'open' | 'closed' * - ping_status - can be 'open' | 'closed' * - sticky * - post_thumbnail - ID of a media item to use as the post thumbnail/featured image * - custom_fields - array, with each element containing 'key' and 'value' * - terms - array, with taxonomy names as keys and arrays of term IDs as values * - terms_names - array, with taxonomy names as keys and arrays of term names as values * - enclosure * - any other fields supported by wp_insert_post() * @return array Post data (see {@see WP_JSON_Posts::get_post}) */ public function new_post( $data ) { unset( $data['ID'] ); $result = $this->insert_post( $data ); if ( $result instanceof WP_Error ) { return $result; } $response = json_ensure_response( $this->get_post( $result ) ); $response->set_status( 201 ); $response->header( 'Location', json_url( '/posts/' . $result ) ); return $response; }I've tried sending the json to the /posts and it works fine for all bar the terms....
I've tried all of the following: this:
"title": $scope.listobject.listname, "status": "publish", "slug": "selling","type": "listing", "post_meta": $scope.dataform, "terms": { "listing_categy": [9] }this:
"title": $scope.listobject.listname, "status": "publish", "slug": "selling","type": "listing", "post_meta": $scope.dataform, "terms": { "listing_categy": [ {"ID": 9 } ]}this:
"title": $scope.listobject.listname, "status": "publish", "slug": "selling","type": "listing", "post_meta": $scope.dataform, "terms": { "listing_categy": [9, 10 ] }This:
"terms_names": { "listing_categy": ["selling", "buying"] }the documentation is awful
最满意答案
“listing_categy”是关于GET的,这里有WP-API api文档的 POSTing post参数
一个快速而又简单的解决方案可能是在lib / class-wp-json-posts.php中为insert_post添加一些代码。
在第921行插入:
if( ! empty($data['term'])) { $post_custom_tax['term']=$data['term']; } if( ! empty($data['tax'])) { $post_custom_tax['tax']=$data['tax']; }就在之后
$post_ID = $update ? wp_update_post( $post, true ) : wp_insert_post( $post, true );插
if(!empty($post_custom_tax['term']) && ! empty( $post_custom_tax['tax'])) { wp_set_object_terms( $post_ID, $post_custom_tax['term'], $post_custom_tax['tax'], true ); //with true for appending categories }所以现在将这些属性添加到你的json post对象中
"term": "custom-term-slug", "tax": "custom-tax-slug"*这需要使用过滤器进行重构
"listing_categy" is about GET, here you have POSTing post parameters form WP-API api docs
A quick but dirt solution could be to add some code to insert_post in lib/class-wp-json-posts.php.
Insert at line 921:
if( ! empty($data['term'])) { $post_custom_tax['term']=$data['term']; } if( ! empty($data['tax'])) { $post_custom_tax['tax']=$data['tax']; }and just after
$post_ID = $update ? wp_update_post( $post, true ) : wp_insert_post( $post, true );insert
if(!empty($post_custom_tax['term']) && ! empty( $post_custom_tax['tax'])) { wp_set_object_terms( $post_ID, $post_custom_tax['term'], $post_custom_tax['tax'], true ); //with true for appending categories }So now add this properties to your json post object looking like
"term": "custom-term-slug", "tax": "custom-tax-slug"*This need to be refactored using filters
更多推荐
发布评论