具有自定义分类的WP

编程入门 行业动态 更新时间:2024-10-28 00:22:23
具有自定义分类的WP-API自定义帖子类型(WP-API custom post type with custom taxonomy)

我正在与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

更多推荐

本文发布于:2023-07-22 00:58:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1215492.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:自定义   WP

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!