PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 15.9-a.3
Jetpack – WP Security, Backup, Speed, & Growth v15.9-a.3
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 2 weeks ago class.wpcom-json-api-add-widget-endpoint.php 6 months ago class.wpcom-json-api-autosave-post-v1-1-endpoint.php 6 months ago class.wpcom-json-api-bulk-delete-post-endpoint.php 6 months ago class.wpcom-json-api-bulk-restore-post-endpoint.php 6 months ago class.wpcom-json-api-bulk-update-comments-endpoint.php 6 months ago class.wpcom-json-api-comment-endpoint.php 6 months ago class.wpcom-json-api-delete-media-endpoint.php 6 months ago class.wpcom-json-api-delete-media-v1-1-endpoint.php 6 months ago class.wpcom-json-api-edit-media-v1-2-endpoint.php 6 months ago class.wpcom-json-api-get-autosave-v1-1-endpoint.php 6 months ago class.wpcom-json-api-get-comment-counts-endpoint.php 6 months ago class.wpcom-json-api-get-comment-endpoint.php 6 months ago class.wpcom-json-api-get-comment-history-endpoint.php 6 months ago class.wpcom-json-api-get-comments-tree-endpoint.php 6 months ago class.wpcom-json-api-get-comments-tree-v1-1-endpoint.php 6 months ago class.wpcom-json-api-get-comments-tree-v1-2-endpoint.php 6 months ago class.wpcom-json-api-get-customcss.php 6 months ago class.wpcom-json-api-get-media-endpoint.php 6 months ago class.wpcom-json-api-get-media-v1-1-endpoint.php 6 months ago class.wpcom-json-api-get-media-v1-2-endpoint.php 6 months ago class.wpcom-json-api-get-post-counts-v1-1-endpoint.php 6 months ago class.wpcom-json-api-get-post-endpoint.php 6 months ago class.wpcom-json-api-get-post-v1-1-endpoint.php 6 months ago class.wpcom-json-api-get-site-endpoint.php 4 weeks ago class.wpcom-json-api-get-site-v1-2-endpoint.php 3 months ago class.wpcom-json-api-get-taxonomies-endpoint.php 1 month ago class.wpcom-json-api-get-taxonomy-endpoint.php 6 months ago class.wpcom-json-api-get-term-endpoint.php 6 months ago class.wpcom-json-api-list-comments-endpoint.php 6 months ago class.wpcom-json-api-list-dropdown-pages-endpoint.php 6 months ago class.wpcom-json-api-list-embeds-endpoint.php 6 months ago class.wpcom-json-api-list-media-endpoint.php 6 months ago class.wpcom-json-api-list-media-v1-1-endpoint.php 6 months ago class.wpcom-json-api-list-media-v1-2-endpoint.php 6 months ago class.wpcom-json-api-list-post-type-taxonomies-endpoint.php 6 months ago class.wpcom-json-api-list-post-types-endpoint.php 6 months ago class.wpcom-json-api-list-posts-endpoint.php 6 months ago class.wpcom-json-api-list-posts-v1-1-endpoint.php 6 months ago class.wpcom-json-api-list-posts-v1-2-endpoint.php 6 months ago class.wpcom-json-api-list-roles-endpoint.php 6 months ago class.wpcom-json-api-list-shortcodes-endpoint.php 6 months ago class.wpcom-json-api-list-terms-endpoint.php 6 months ago class.wpcom-json-api-list-users-endpoint.php 6 months ago class.wpcom-json-api-menus-v1-1-endpoint.php 6 months ago class.wpcom-json-api-post-endpoint.php 6 months ago class.wpcom-json-api-post-v1-1-endpoint.php 1 month ago class.wpcom-json-api-render-embed-endpoint.php 6 months ago class.wpcom-json-api-render-embed-reversal-endpoint.php 6 months ago class.wpcom-json-api-render-endpoint.php 2 weeks ago class.wpcom-json-api-render-shortcode-endpoint.php 6 months ago class.wpcom-json-api-sharing-buttons-endpoint.php 6 months ago class.wpcom-json-api-site-settings-endpoint.php 2 months ago class.wpcom-json-api-site-settings-v1-2-endpoint.php 6 months ago class.wpcom-json-api-site-settings-v1-3-endpoint.php 6 months ago class.wpcom-json-api-site-settings-v1-4-endpoint.php 2 months ago class.wpcom-json-api-site-user-endpoint.php 6 months ago class.wpcom-json-api-taxonomy-endpoint.php 6 months ago class.wpcom-json-api-update-comment-endpoint.php 4 months ago class.wpcom-json-api-update-customcss.php 6 months ago class.wpcom-json-api-update-media-endpoint.php 6 months ago class.wpcom-json-api-update-media-v1-1-endpoint.php 6 months ago class.wpcom-json-api-update-post-endpoint.php 2 weeks ago class.wpcom-json-api-update-post-v1-1-endpoint.php 2 weeks ago class.wpcom-json-api-update-post-v1-2-endpoint.php 2 weeks ago class.wpcom-json-api-update-site-homepage-endpoint.php 6 months ago class.wpcom-json-api-update-site-logo-endpoint.php 6 months ago class.wpcom-json-api-update-taxonomy-endpoint.php 5 months ago class.wpcom-json-api-update-term-endpoint.php 6 months ago class.wpcom-json-api-update-user-endpoint.php 6 months ago class.wpcom-json-api-upload-media-endpoint.php 6 months ago class.wpcom-json-api-upload-media-v1-1-endpoint.php 6 months ago
class.wpcom-json-api-update-taxonomy-endpoint.php
393 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 if ( ! defined( 'ABSPATH' ) ) {
15 exit( 0 );
16 }
17
18 new WPCOM_JSON_API_Update_Taxonomy_Endpoint(
19 array(
20 'description' => 'Create a new category.',
21 'group' => 'taxonomy',
22 'stat' => 'categories:new',
23
24 'method' => 'POST',
25 'path' => '/sites/%s/categories/new',
26 'path_labels' => array(
27 '$site' => '(int|string) Site ID or domain',
28 ),
29
30 'request_format' => array(
31 'name' => '(string) Name of the category',
32 'description' => '(string) A description of the category',
33 'parent' => '(int) ID of the parent category',
34 ),
35
36 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/categories/new/',
37 'example_request_data' => array(
38 'headers' => array(
39 'authorization' => 'Bearer YOUR_API_TOKEN',
40 ),
41 'body' => array(
42 'name' => 'Puppies',
43 ),
44 ),
45 )
46 );
47
48 new WPCOM_JSON_API_Update_Taxonomy_Endpoint(
49 array(
50 'description' => 'Create a new tag.',
51 'group' => 'taxonomy',
52 'stat' => 'tags:new',
53
54 'method' => 'POST',
55 'path' => '/sites/%s/tags/new',
56 'path_labels' => array(
57 '$site' => '(int|string) Site ID or domain',
58 ),
59
60 'request_format' => array(
61 'name' => '(string) Name of the tag',
62 'description' => '(string) A description of the tag',
63 ),
64
65 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/tags/new/',
66 'example_request_data' => array(
67 'headers' => array(
68 'authorization' => 'Bearer YOUR_API_TOKEN',
69 ),
70 'body' => array(
71 'name' => 'Kitties',
72 ),
73 ),
74 )
75 );
76
77 new WPCOM_JSON_API_Update_Taxonomy_Endpoint(
78 array(
79 'description' => 'Edit a tag.',
80 'group' => 'taxonomy',
81 'stat' => 'tags:1:POST',
82
83 'method' => 'POST',
84 'path' => '/sites/%s/tags/slug:%s',
85 'path_labels' => array(
86 '$site' => '(int|string) Site ID or domain',
87 '$tag' => '(string) The tag slug',
88 ),
89
90 'request_format' => array(
91 'name' => '(string) Name of the tag',
92 'description' => '(string) A description of the tag',
93 ),
94
95 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/tags/slug:testing-tag',
96 'example_request_data' => array(
97 'headers' => array(
98 'authorization' => 'Bearer YOUR_API_TOKEN',
99 ),
100 'body' => array(
101 'description' => 'Kitties are awesome!',
102 ),
103 ),
104 )
105 );
106
107 new WPCOM_JSON_API_Update_Taxonomy_Endpoint(
108 array(
109 'description' => 'Edit a category.',
110 'group' => 'taxonomy',
111 'stat' => 'categories:1:POST',
112
113 'method' => 'POST',
114 'path' => '/sites/%s/categories/slug:%s',
115 'path_labels' => array(
116 '$site' => '(int|string) Site ID or domain',
117 '$category' => '(string) The category slug',
118 ),
119
120 'request_format' => array(
121 'name' => '(string) Name of the category',
122 'description' => '(string) A description of the category',
123 'parent' => '(int) ID of the parent category',
124 ),
125
126 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/categories/slug:testing-category',
127 'example_request_data' => array(
128 'headers' => array(
129 'authorization' => 'Bearer YOUR_API_TOKEN',
130 ),
131 'body' => array(
132 'description' => 'Puppies are great!',
133 ),
134 ),
135 )
136 );
137
138 new WPCOM_JSON_API_Update_Taxonomy_Endpoint(
139 array(
140 'description' => 'Delete a category.',
141 'group' => 'taxonomy',
142 'stat' => 'categories:1:delete',
143
144 'method' => 'POST',
145 'path' => '/sites/%s/categories/slug:%s/delete',
146 'path_labels' => array(
147 '$site' => '(int|string) Site ID or domain',
148 '$category' => '(string) The category slug',
149 ),
150 'response_format' => array(
151 'slug' => '(string) The slug of the deleted category',
152 'success' => '(bool) Was the operation successful?',
153 ),
154
155 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/categories/slug:$category/delete',
156 'example_request_data' => array(
157 'headers' => array(
158 'authorization' => 'Bearer YOUR_API_TOKEN',
159 ),
160 ),
161 )
162 );
163
164 new WPCOM_JSON_API_Update_Taxonomy_Endpoint(
165 array(
166 'description' => 'Delete a tag.',
167 'group' => 'taxonomy',
168 'stat' => 'tags:1:delete',
169
170 'method' => 'POST',
171 'path' => '/sites/%s/tags/slug:%s/delete',
172 'path_labels' => array(
173 '$site' => '(int|string) Site ID or domain',
174 '$tag' => '(string) The tag slug',
175 ),
176 'response_format' => array(
177 'slug' => '(string) The slug of the deleted tag',
178 'success' => '(bool) Was the operation successful?',
179 ),
180
181 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/tags/slug:$tag/delete',
182 'example_request_data' => array(
183 'headers' => array(
184 'authorization' => 'Bearer YOUR_API_TOKEN',
185 ),
186 ),
187 )
188 );
189
190 /**
191 * Update site taxonomy API class.
192 *
193 * @phan-constructor-used-for-side-effects
194 */
195 class WPCOM_JSON_API_Update_Taxonomy_Endpoint extends WPCOM_JSON_API_Taxonomy_Endpoint {
196 /**
197 * Update site taxonomy API callback.
198 *
199 * - /sites/%s/tags|categories/new -> $blog_id
200 * - /sites/%s/tags|categories/slug:%s -> $blog_id, $taxonomy_id
201 * - /sites/%s/tags|categories/slug:%s/delete -> $blog_id, $taxonomy_id
202 *
203 * @param string $path API path.
204 * @param int $blog_id Blog ID.
205 * @param int|string $object_id Term.
206 */
207 public function callback( $path = '', $blog_id = 0, $object_id = 0 ) {
208 $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
209 if ( is_wp_error( $blog_id ) ) {
210 return $blog_id;
211 }
212
213 if ( preg_match( '#/tags/#i', $path ) ) {
214 $taxonomy_type = 'post_tag';
215 } else {
216 $taxonomy_type = 'category';
217 }
218
219 if ( $this->api->ends_with( $path, '/delete' ) ) {
220 return $this->delete_taxonomy( $path, $blog_id, $object_id, $taxonomy_type );
221 } elseif ( $this->api->ends_with( $path, '/new' ) ) {
222 return $this->new_taxonomy( $path, $blog_id, $taxonomy_type );
223 }
224
225 return $this->update_taxonomy( $path, $blog_id, $object_id, $taxonomy_type );
226 }
227
228 /**
229 * Create a new taxonomy.
230 *
231 * - /sites/%s/tags|categories/new -> $blog_id
232 *
233 * @param string $path API path.
234 * @param int $blog_id Blog ID.
235 * @param string $taxonomy_type Taxonomy type (category, post_tag).
236 */
237 public function new_taxonomy( $path, $blog_id, $taxonomy_type ) {
238 $args = $this->query_args();
239 $input = $this->input();
240 if ( ! is_array( $input ) || ! $input || ! strlen( $input['name'] ) ) {
241 return new WP_Error( 'invalid_input', 'Unknown data passed', 400 );
242 }
243
244 $user = wp_get_current_user();
245 if ( ! $user || is_wp_error( $user ) || ! $user->ID ) {
246 return new WP_Error( 'authorization_required', 'An active access token must be used to manage taxonomies.', 403 );
247 }
248
249 $tax = get_taxonomy( $taxonomy_type );
250 if ( ! current_user_can( $tax->cap->edit_terms ) ) {
251 return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
252 }
253
254 if ( 'category' !== $taxonomy_type || ! isset( $input['parent'] ) ) {
255 $input['parent'] = 0;
256 }
257
258 $term = get_term_by( 'name', $input['name'], $taxonomy_type );
259 if ( $term ) {
260 // the same name is allowed as long as the parents are different.
261 if ( $input['parent'] === $term->parent ) {
262 return new WP_Error( 'duplicate', 'A taxonomy with that name already exists', 400 );
263 }
264 }
265
266 $data = wp_insert_term(
267 addslashes( $input['name'] ),
268 $taxonomy_type,
269 array(
270 'description' => isset( $input['description'] ) ? addslashes( $input['description'] ) : '',
271 'parent' => $input['parent'],
272 )
273 );
274
275 if ( is_wp_error( $data ) ) {
276 return $data;
277 }
278
279 $taxonomy = get_term_by( 'id', $data['term_id'], $taxonomy_type );
280
281 $return = $this->get_taxonomy( $taxonomy->slug, $taxonomy_type, $args['context'] );
282 if ( ! $return || is_wp_error( $return ) ) {
283 return $return;
284 }
285
286 /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
287 do_action( 'wpcom_json_api_objects', 'taxonomies' );
288 return $return;
289 }
290
291 /**
292 * Update a taxonomy.
293 *
294 * - /sites/%s/tags|categories/slug:%s -> $blog_id, $taxonomy_id
295 *
296 * @param string $path API path.
297 * @param int $blog_id Blog ID.
298 * @param int|string $object_id Term.
299 * @param string $taxonomy_type Taxonomy type (category, post_tag).
300 */
301 public function update_taxonomy( $path, $blog_id, $object_id, $taxonomy_type ) {
302 $taxonomy = get_term_by( 'slug', $object_id, $taxonomy_type );
303 $tax = get_taxonomy( $taxonomy_type );
304 if ( ! current_user_can( $tax->cap->edit_terms ) ) {
305 return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
306 }
307
308 if ( ! $taxonomy || is_wp_error( $taxonomy ) ) {
309 return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
310 }
311
312 if ( false === term_exists( $object_id, $taxonomy_type ) ) {
313 return new WP_Error( 'unknown_taxonomy', 'That taxonomy does not exist', 404 );
314 }
315
316 $args = $this->query_args();
317 $input = $this->input( false );
318 if ( ! is_array( $input ) || ! $input ) {
319 return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
320 }
321
322 $update = array();
323 if ( 'category' === $taxonomy_type && ! empty( $input['parent'] ) ) {
324 $update['parent'] = $input['parent'];
325 }
326
327 if ( ! empty( $input['description'] ) ) {
328 $update['description'] = addslashes( $input['description'] );
329 }
330
331 if ( ! empty( $input['name'] ) ) {
332 $update['name'] = addslashes( $input['name'] );
333 }
334
335 $data = wp_update_term( $taxonomy->term_id, $taxonomy_type, $update );
336 if ( is_wp_error( $data ) ) {
337 return $data;
338 }
339 $taxonomy = get_term_by( 'id', $data['term_id'], $taxonomy_type );
340
341 $return = $this->get_taxonomy( $taxonomy->slug, $taxonomy_type, $args['context'] );
342 if ( ! $return || is_wp_error( $return ) ) {
343 return $return;
344 }
345
346 /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
347 do_action( 'wpcom_json_api_objects', 'taxonomies' );
348 return $return;
349 }
350
351 /**
352 * Delete a taxonomy.
353 *
354 * - /sites/%s/tags|categories/%s/delete -> $blog_id, $taxonomy_id
355 *
356 * @param string $path API path.
357 * @param int $blog_id Blog ID.
358 * @param int|string $object_id Term.
359 * @param string $taxonomy_type Taxonomy type (category, post_tag).
360 */
361 public function delete_taxonomy( $path, $blog_id, $object_id, $taxonomy_type ) {
362 $taxonomy = get_term_by( 'slug', $object_id, $taxonomy_type );
363 $tax = get_taxonomy( $taxonomy_type );
364 if ( ! current_user_can( $tax->cap->delete_terms ) ) {
365 return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
366 }
367
368 if ( ! $taxonomy || is_wp_error( $taxonomy ) ) {
369 return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
370 }
371
372 if ( false === term_exists( $object_id, $taxonomy_type ) ) {
373 return new WP_Error( 'unknown_taxonomy', 'That taxonomy does not exist', 404 );
374 }
375
376 $args = $this->query_args();
377 $return = $this->get_taxonomy( $taxonomy->slug, $taxonomy_type, $args['context'] );
378 if ( ! $return || is_wp_error( $return ) ) {
379 return $return;
380 }
381
382 /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
383 do_action( 'wpcom_json_api_objects', 'taxonomies' );
384
385 wp_delete_term( $taxonomy->term_id, $taxonomy_type );
386
387 return array(
388 'slug' => (string) $taxonomy->slug,
389 'success' => 'true',
390 );
391 }
392 }
393