PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.2.2
Jetpack – WP Security, Backup, Speed, & Growth v14.2.2
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / json-endpoints / class.wpcom-json-api-update-taxonomy-endpoint.php
jetpack / json-endpoints Last commit date
jetpack 1 year ago class.wpcom-json-api-add-widget-endpoint.php 2 years ago class.wpcom-json-api-autosave-post-v1-1-endpoint.php 5 years ago class.wpcom-json-api-bulk-delete-post-endpoint.php 4 years ago class.wpcom-json-api-bulk-restore-post-endpoint.php 2 years ago class.wpcom-json-api-bulk-update-comments-endpoint.php 3 years ago class.wpcom-json-api-comment-endpoint.php 1 year ago class.wpcom-json-api-delete-media-endpoint.php 4 years ago class.wpcom-json-api-delete-media-v1-1-endpoint.php 4 years ago class.wpcom-json-api-edit-media-v1-2-endpoint.php 2 years ago class.wpcom-json-api-get-autosave-v1-1-endpoint.php 5 years ago class.wpcom-json-api-get-comment-counts-endpoint.php 1 year ago class.wpcom-json-api-get-comment-endpoint.php 4 years ago class.wpcom-json-api-get-comment-history-endpoint.php 1 year ago class.wpcom-json-api-get-comments-tree-endpoint.php 4 years ago class.wpcom-json-api-get-comments-tree-v1-1-endpoint.php 4 years ago class.wpcom-json-api-get-comments-tree-v1-2-endpoint.php 4 years ago class.wpcom-json-api-get-customcss.php 2 years ago class.wpcom-json-api-get-media-endpoint.php 4 years ago class.wpcom-json-api-get-media-v1-1-endpoint.php 4 years ago class.wpcom-json-api-get-media-v1-2-endpoint.php 2 years ago class.wpcom-json-api-get-post-counts-v1-1-endpoint.php 2 years ago class.wpcom-json-api-get-post-endpoint.php 2 years ago class.wpcom-json-api-get-post-v1-1-endpoint.php 2 years ago class.wpcom-json-api-get-site-endpoint.php 1 year ago class.wpcom-json-api-get-site-v1-2-endpoint.php 2 years ago class.wpcom-json-api-get-taxonomies-endpoint.php 2 years ago class.wpcom-json-api-get-taxonomy-endpoint.php 4 years ago class.wpcom-json-api-get-term-endpoint.php 4 years ago class.wpcom-json-api-list-comments-endpoint.php 2 years ago class.wpcom-json-api-list-dropdown-pages-endpoint.php 3 years ago class.wpcom-json-api-list-embeds-endpoint.php 4 years ago class.wpcom-json-api-list-media-endpoint.php 2 years ago class.wpcom-json-api-list-media-v1-1-endpoint.php 2 years ago class.wpcom-json-api-list-media-v1-2-endpoint.php 2 years ago class.wpcom-json-api-list-post-type-taxonomies-endpoint.php 4 years ago class.wpcom-json-api-list-post-types-endpoint.php 3 years ago class.wpcom-json-api-list-posts-endpoint.php 2 years ago class.wpcom-json-api-list-posts-v1-1-endpoint.php 3 years ago class.wpcom-json-api-list-posts-v1-2-endpoint.php 3 years ago class.wpcom-json-api-list-roles-endpoint.php 1 year ago class.wpcom-json-api-list-shortcodes-endpoint.php 4 years ago class.wpcom-json-api-list-terms-endpoint.php 2 years ago class.wpcom-json-api-list-users-endpoint.php 2 years ago class.wpcom-json-api-menus-v1-1-endpoint.php 2 years ago class.wpcom-json-api-post-endpoint.php 2 years ago class.wpcom-json-api-post-v1-1-endpoint.php 2 years ago class.wpcom-json-api-render-embed-endpoint.php 2 years ago class.wpcom-json-api-render-embed-reversal-endpoint.php 2 years ago class.wpcom-json-api-render-endpoint.php 3 years ago class.wpcom-json-api-render-shortcode-endpoint.php 3 years ago class.wpcom-json-api-sharing-buttons-endpoint.php 2 years ago class.wpcom-json-api-site-settings-endpoint.php 1 year ago class.wpcom-json-api-site-settings-v1-2-endpoint.php 2 years ago class.wpcom-json-api-site-settings-v1-3-endpoint.php 2 years ago class.wpcom-json-api-site-settings-v1-4-endpoint.php 1 year ago class.wpcom-json-api-site-user-endpoint.php 1 year ago class.wpcom-json-api-taxonomy-endpoint.php 4 years ago class.wpcom-json-api-update-comment-endpoint.php 2 years ago class.wpcom-json-api-update-customcss.php 2 years ago class.wpcom-json-api-update-media-endpoint.php 4 years ago class.wpcom-json-api-update-media-v1-1-endpoint.php 2 years ago class.wpcom-json-api-update-post-endpoint.php 3 years ago class.wpcom-json-api-update-post-v1-1-endpoint.php 2 years ago class.wpcom-json-api-update-post-v1-2-endpoint.php 1 year ago class.wpcom-json-api-update-site-homepage-endpoint.php 4 years ago class.wpcom-json-api-update-site-logo-endpoint.php 2 years ago class.wpcom-json-api-update-taxonomy-endpoint.php 4 years ago class.wpcom-json-api-update-term-endpoint.php 4 years ago class.wpcom-json-api-update-user-endpoint.php 3 years ago class.wpcom-json-api-upload-media-endpoint.php 3 years ago class.wpcom-json-api-upload-media-v1-1-endpoint.php 1 year ago
class.wpcom-json-api-update-taxonomy-endpoint.php
384 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Update site taxonomy API endpoints.
4 *
5 * Endpoints:
6 * Create a new category: /sites/%s/categories/new
7 * Create a new tag: /sites/%s/tags/new
8 * Edit a category: /sites/%s/categories/slug:%s
9 * Edit a tag: /sites/%s/tags/slug:%s
10 * Delete a category: /sites/%s/categories/slug:%s/delete
11 * Delete a tag: /sites/%s/tags/slug:%s/delete
12 */
13
14 new WPCOM_JSON_API_Update_Taxonomy_Endpoint(
15 array(
16 'description' => 'Create a new category.',
17 'group' => 'taxonomy',
18 'stat' => 'categories:new',
19
20 'method' => 'POST',
21 'path' => '/sites/%s/categories/new',
22 'path_labels' => array(
23 '$site' => '(int|string) Site ID or domain',
24 ),
25
26 'request_format' => array(
27 'name' => '(string) Name of the category',
28 'description' => '(string) A description of the category',
29 'parent' => '(int) ID of the parent category',
30 ),
31
32 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/categories/new/',
33 'example_request_data' => array(
34 'headers' => array(
35 'authorization' => 'Bearer YOUR_API_TOKEN',
36 ),
37 'body' => array(
38 'name' => 'Puppies',
39 ),
40 ),
41 )
42 );
43
44 new WPCOM_JSON_API_Update_Taxonomy_Endpoint(
45 array(
46 'description' => 'Create a new tag.',
47 'group' => 'taxonomy',
48 'stat' => 'tags:new',
49
50 'method' => 'POST',
51 'path' => '/sites/%s/tags/new',
52 'path_labels' => array(
53 '$site' => '(int|string) Site ID or domain',
54 ),
55
56 'request_format' => array(
57 'name' => '(string) Name of the tag',
58 'description' => '(string) A description of the tag',
59 ),
60
61 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/tags/new/',
62 'example_request_data' => array(
63 'headers' => array(
64 'authorization' => 'Bearer YOUR_API_TOKEN',
65 ),
66 'body' => array(
67 'name' => 'Kitties',
68 ),
69 ),
70 )
71 );
72
73 new WPCOM_JSON_API_Update_Taxonomy_Endpoint(
74 array(
75 'description' => 'Edit a tag.',
76 'group' => 'taxonomy',
77 'stat' => 'tags:1:POST',
78
79 'method' => 'POST',
80 'path' => '/sites/%s/tags/slug:%s',
81 'path_labels' => array(
82 '$site' => '(int|string) Site ID or domain',
83 '$tag' => '(string) The tag slug',
84 ),
85
86 'request_format' => array(
87 'name' => '(string) Name of the tag',
88 'description' => '(string) A description of the tag',
89 ),
90
91 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/tags/slug:testing-tag',
92 'example_request_data' => array(
93 'headers' => array(
94 'authorization' => 'Bearer YOUR_API_TOKEN',
95 ),
96 'body' => array(
97 'description' => 'Kitties are awesome!',
98 ),
99 ),
100 )
101 );
102
103 new WPCOM_JSON_API_Update_Taxonomy_Endpoint(
104 array(
105 'description' => 'Edit a category.',
106 'group' => 'taxonomy',
107 'stat' => 'categories:1:POST',
108
109 'method' => 'POST',
110 'path' => '/sites/%s/categories/slug:%s',
111 'path_labels' => array(
112 '$site' => '(int|string) Site ID or domain',
113 '$category' => '(string) The category slug',
114 ),
115
116 'request_format' => array(
117 'name' => '(string) Name of the category',
118 'description' => '(string) A description of the category',
119 'parent' => '(int) ID of the parent category',
120 ),
121
122 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/categories/slug:testing-category',
123 'example_request_data' => array(
124 'headers' => array(
125 'authorization' => 'Bearer YOUR_API_TOKEN',
126 ),
127 'body' => array(
128 'description' => 'Puppies are great!',
129 ),
130 ),
131 )
132 );
133
134 new WPCOM_JSON_API_Update_Taxonomy_Endpoint(
135 array(
136 'description' => 'Delete a category.',
137 'group' => 'taxonomy',
138 'stat' => 'categories:1:delete',
139
140 'method' => 'POST',
141 'path' => '/sites/%s/categories/slug:%s/delete',
142 'path_labels' => array(
143 '$site' => '(int|string) Site ID or domain',
144 '$category' => '(string) The category slug',
145 ),
146 'response_format' => array(
147 'slug' => '(string) The slug of the deleted category',
148 'success' => '(bool) Was the operation successful?',
149 ),
150
151 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/categories/slug:$category/delete',
152 'example_request_data' => array(
153 'headers' => array(
154 'authorization' => 'Bearer YOUR_API_TOKEN',
155 ),
156 ),
157 )
158 );
159
160 new WPCOM_JSON_API_Update_Taxonomy_Endpoint(
161 array(
162 'description' => 'Delete a tag.',
163 'group' => 'taxonomy',
164 'stat' => 'tags:1:delete',
165
166 'method' => 'POST',
167 'path' => '/sites/%s/tags/slug:%s/delete',
168 'path_labels' => array(
169 '$site' => '(int|string) Site ID or domain',
170 '$tag' => '(string) The tag slug',
171 ),
172 'response_format' => array(
173 'slug' => '(string) The slug of the deleted tag',
174 'success' => '(bool) Was the operation successful?',
175 ),
176
177 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/tags/slug:$tag/delete',
178 'example_request_data' => array(
179 'headers' => array(
180 'authorization' => 'Bearer YOUR_API_TOKEN',
181 ),
182 ),
183 )
184 );
185
186 /**
187 * Update site taxonomy API class.
188 */
189 class WPCOM_JSON_API_Update_Taxonomy_Endpoint extends WPCOM_JSON_API_Taxonomy_Endpoint {
190 /**
191 * Update site taxonomy API callback.
192 *
193 * - /sites/%s/tags|categories/new -> $blog_id
194 * - /sites/%s/tags|categories/slug:%s -> $blog_id, $taxonomy_id
195 * - /sites/%s/tags|categories/slug:%s/delete -> $blog_id, $taxonomy_id
196 *
197 * @param string $path API path.
198 * @param int $blog_id Blog ID.
199 * @param int|string $object_id Term.
200 */
201 public function callback( $path = '', $blog_id = 0, $object_id = 0 ) {
202 $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
203 if ( is_wp_error( $blog_id ) ) {
204 return $blog_id;
205 }
206
207 if ( preg_match( '#/tags/#i', $path ) ) {
208 $taxonomy_type = 'post_tag';
209 } else {
210 $taxonomy_type = 'category';
211 }
212
213 if ( $this->api->ends_with( $path, '/delete' ) ) {
214 return $this->delete_taxonomy( $path, $blog_id, $object_id, $taxonomy_type );
215 } elseif ( $this->api->ends_with( $path, '/new' ) ) {
216 return $this->new_taxonomy( $path, $blog_id, $taxonomy_type );
217 }
218
219 return $this->update_taxonomy( $path, $blog_id, $object_id, $taxonomy_type );
220 }
221
222 /**
223 * Create a new taxonomy.
224 *
225 * - /sites/%s/tags|categories/new -> $blog_id
226 *
227 * @param string $path API path.
228 * @param int $blog_id Blog ID.
229 * @param string $taxonomy_type Taxonomy type (category, post_tag).
230 */
231 public function new_taxonomy( $path, $blog_id, $taxonomy_type ) {
232 $args = $this->query_args();
233 $input = $this->input();
234 if ( ! is_array( $input ) || ! $input || ! strlen( $input['name'] ) ) {
235 return new WP_Error( 'invalid_input', 'Unknown data passed', 400 );
236 }
237
238 $user = wp_get_current_user();
239 if ( ! $user || is_wp_error( $user ) || ! $user->ID ) {
240 return new WP_Error( 'authorization_required', 'An active access token must be used to manage taxonomies.', 403 );
241 }
242
243 $tax = get_taxonomy( $taxonomy_type );
244 if ( ! current_user_can( $tax->cap->edit_terms ) ) {
245 return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
246 }
247
248 if ( 'category' !== $taxonomy_type || ! isset( $input['parent'] ) ) {
249 $input['parent'] = 0;
250 }
251
252 $term = get_term_by( 'name', $input['name'], $taxonomy_type );
253 if ( $term ) {
254 // the same name is allowed as long as the parents are different.
255 if ( $input['parent'] === $term->parent ) {
256 return new WP_Error( 'duplicate', 'A taxonomy with that name already exists', 400 );
257 }
258 }
259
260 $data = wp_insert_term(
261 addslashes( $input['name'] ),
262 $taxonomy_type,
263 array(
264 'description' => isset( $input['description'] ) ? addslashes( $input['description'] ) : '',
265 'parent' => $input['parent'],
266 )
267 );
268
269 if ( is_wp_error( $data ) ) {
270 return $data;
271 }
272
273 $taxonomy = get_term_by( 'id', $data['term_id'], $taxonomy_type );
274
275 $return = $this->get_taxonomy( $taxonomy->slug, $taxonomy_type, $args['context'] );
276 if ( ! $return || is_wp_error( $return ) ) {
277 return $return;
278 }
279
280 /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
281 do_action( 'wpcom_json_api_objects', 'taxonomies' );
282 return $return;
283 }
284
285 /**
286 * Update a taxonomy.
287 *
288 * - /sites/%s/tags|categories/slug:%s -> $blog_id, $taxonomy_id
289 *
290 * @param string $path API path.
291 * @param int $blog_id Blog ID.
292 * @param int|string $object_id Term.
293 * @param string $taxonomy_type Taxonomy type (category, post_tag).
294 */
295 public function update_taxonomy( $path, $blog_id, $object_id, $taxonomy_type ) {
296 $taxonomy = get_term_by( 'slug', $object_id, $taxonomy_type );
297 $tax = get_taxonomy( $taxonomy_type );
298 if ( ! current_user_can( $tax->cap->edit_terms ) ) {
299 return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
300 }
301
302 if ( ! $taxonomy || is_wp_error( $taxonomy ) ) {
303 return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
304 }
305
306 if ( false === term_exists( $object_id, $taxonomy_type ) ) {
307 return new WP_Error( 'unknown_taxonomy', 'That taxonomy does not exist', 404 );
308 }
309
310 $args = $this->query_args();
311 $input = $this->input( false );
312 if ( ! is_array( $input ) || ! $input ) {
313 return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
314 }
315
316 $update = array();
317 if ( 'category' === $taxonomy_type && ! empty( $input['parent'] ) ) {
318 $update['parent'] = $input['parent'];
319 }
320
321 if ( ! empty( $input['description'] ) ) {
322 $update['description'] = addslashes( $input['description'] );
323 }
324
325 if ( ! empty( $input['name'] ) ) {
326 $update['name'] = addslashes( $input['name'] );
327 }
328
329 $data = wp_update_term( $taxonomy->term_id, $taxonomy_type, $update );
330 $taxonomy = get_term_by( 'id', $data['term_id'], $taxonomy_type );
331
332 $return = $this->get_taxonomy( $taxonomy->slug, $taxonomy_type, $args['context'] );
333 if ( ! $return || is_wp_error( $return ) ) {
334 return $return;
335 }
336
337 /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
338 do_action( 'wpcom_json_api_objects', 'taxonomies' );
339 return $return;
340 }
341
342 /**
343 * Delete a taxonomy.
344 *
345 * - /sites/%s/tags|categories/%s/delete -> $blog_id, $taxonomy_id
346 *
347 * @param string $path API path.
348 * @param int $blog_id Blog ID.
349 * @param int|string $object_id Term.
350 * @param string $taxonomy_type Taxonomy type (category, post_tag).
351 */
352 public function delete_taxonomy( $path, $blog_id, $object_id, $taxonomy_type ) {
353 $taxonomy = get_term_by( 'slug', $object_id, $taxonomy_type );
354 $tax = get_taxonomy( $taxonomy_type );
355 if ( ! current_user_can( $tax->cap->delete_terms ) ) {
356 return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
357 }
358
359 if ( ! $taxonomy || is_wp_error( $taxonomy ) ) {
360 return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
361 }
362
363 if ( false === term_exists( $object_id, $taxonomy_type ) ) {
364 return new WP_Error( 'unknown_taxonomy', 'That taxonomy does not exist', 404 );
365 }
366
367 $args = $this->query_args();
368 $return = $this->get_taxonomy( $taxonomy->slug, $taxonomy_type, $args['context'] );
369 if ( ! $return || is_wp_error( $return ) ) {
370 return $return;
371 }
372
373 /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
374 do_action( 'wpcom_json_api_objects', 'taxonomies' );
375
376 wp_delete_term( $taxonomy->term_id, $taxonomy_type );
377
378 return array(
379 'slug' => (string) $taxonomy->slug,
380 'success' => 'true',
381 );
382 }
383 }
384