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-term-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-term-endpoint.php
302 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Update site terms API endpoints.
4 *
5 * Endpoints:
6 * Create a new term: /sites/%s/taxonomies/%s/terms/new
7 * Edit a term: /sites/%s/taxonomies/%s/terms/slug:%s
8 * Delete a term: /sites/%s/taxonomies/%s/terms/slug:%s/delete
9 */
10
11 if ( ! defined( 'ABSPATH' ) ) {
12 exit( 0 );
13 }
14
15 new WPCOM_JSON_API_Update_Term_Endpoint(
16 array(
17 'description' => 'Create a new term.',
18 'group' => 'taxonomy',
19 'stat' => 'terms:new',
20 'method' => 'POST',
21 'path' => '/sites/%s/taxonomies/%s/terms/new',
22 'path_labels' => array(
23 '$site' => '(int|string) Site ID or domain',
24 '$taxonomy' => '(string) Taxonomy',
25 ),
26 'request_format' => array(
27 'name' => '(string) Name of the term',
28 'description' => '(string) A description of the term',
29 'parent' => '(int) The parent ID for the term, if hierarchical',
30 ),
31 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/new',
32 'example_request_data' => array(
33 'headers' => array(
34 'authorization' => 'Bearer YOUR_API_TOKEN',
35 ),
36 'body' => array(
37 'name' => 'Ribs & Chicken',
38 ),
39 ),
40 )
41 );
42
43 new WPCOM_JSON_API_Update_Term_Endpoint(
44 array(
45 'description' => 'Edit a term.',
46 'group' => 'taxonomy',
47 'stat' => 'terms:1:POST',
48 'method' => 'POST',
49 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s',
50 'path_labels' => array(
51 '$site' => '(int|string) Site ID or domain',
52 '$taxonomy' => '(string) Taxonomy',
53 '$slug' => '(string) The term slug',
54 ),
55 'request_format' => array(
56 'name' => '(string) Name of the term',
57 'description' => '(string) A description of the term',
58 'parent' => '(int) The parent ID for the term, if hierarchical',
59 ),
60 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/slug:testing-term',
61 'example_request_data' => array(
62 'headers' => array(
63 'authorization' => 'Bearer YOUR_API_TOKEN',
64 ),
65 'body' => array(
66 'description' => 'The most delicious',
67 ),
68 ),
69 )
70 );
71
72 new WPCOM_JSON_API_Update_Term_Endpoint(
73 array(
74 'description' => 'Delete a term.',
75 'group' => 'taxonomy',
76 'stat' => 'terms:1:delete',
77 'method' => 'POST',
78 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s/delete',
79 'path_labels' => array(
80 '$site' => '(int|string) Site ID or domain',
81 '$taxonomy' => '(string) Taxonomy',
82 '$slug' => '(string) The term slug',
83 ),
84 'response_format' => array(
85 'slug' => '(string) The slug of the deleted term',
86 'success' => '(bool) Whether the operation was successful',
87 ),
88 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/slug:$term/delete',
89 'example_request_data' => array(
90 'headers' => array(
91 'authorization' => 'Bearer YOUR_API_TOKEN',
92 ),
93 ),
94 )
95 );
96
97 /**
98 * Update site terms API endpoint class.
99 *
100 * @phan-constructor-used-for-side-effects
101 */
102 class WPCOM_JSON_API_Update_Term_Endpoint extends WPCOM_JSON_API_Taxonomy_Endpoint {
103 /**
104 * Update site terms API callback.
105 *
106 * - /sites/%s/taxonomies/%s/terms/new -> $blog_id, $taxonomy
107 * - /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug
108 * - /sites/%s/taxonomies/%s/terms/slug:%s/delete -> $blog_id, $taxonomy, $slug
109 *
110 * @param string $path API path.
111 * @param int $blog_id Blog ID.
112 * @param string $taxonomy Taxonomy.
113 * @param int|string $slug Slug, term name.
114 */
115 public function callback( $path = '', $blog_id = 0, $taxonomy = 'category', $slug = 0 ) {
116 $slug = urldecode( $slug );
117 $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
118 if ( is_wp_error( $blog_id ) ) {
119 return $blog_id;
120 }
121
122 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
123 $this->load_theme_functions();
124 }
125
126 $user = wp_get_current_user();
127 if ( ! $user || is_wp_error( $user ) || ! $user->ID ) {
128 return new WP_Error( 'authorization_required', 'An active access token must be used to manage taxonomies.', 403 );
129 }
130
131 $taxonomy_meta = get_taxonomy( $taxonomy );
132 if ( false === $taxonomy_meta || (
133 ! $taxonomy_meta->public &&
134 ! current_user_can( $taxonomy_meta->cap->manage_terms ) &&
135 ! current_user_can( $taxonomy_meta->cap->edit_terms ) &&
136 ! current_user_can( $taxonomy_meta->cap->delete_terms ) ) ) {
137 return new WP_Error( 'invalid_taxonomy', 'The taxonomy does not exist', 400 );
138 }
139
140 if ( $this->api->ends_with( $path, '/delete' ) ) {
141 return $this->delete_term( $path, $blog_id, $slug, $taxonomy );
142 } elseif ( $this->api->ends_with( $path, '/new' ) ) {
143 return $this->new_term( $path, $blog_id, $taxonomy );
144 }
145
146 return $this->update_term( $path, $blog_id, $slug, $taxonomy );
147 }
148
149 /**
150 * Create a new term.
151 *
152 * - /sites/%s/taxonomies/%s/terms/new -> $blog_id, $taxonomy
153 *
154 * @param string $path API path.
155 * @param int $blog_id Blog ID.
156 * @param string $taxonomy Taxonomy.
157 */
158 public function new_term( $path, $blog_id, $taxonomy ) {
159 $args = $this->query_args();
160 $input = $this->input();
161 if ( ! is_array( $input ) || ! $input || ! strlen( $input['name'] ) ) {
162 return new WP_Error( 'invalid_input', 'Unknown data passed', 400 );
163 }
164
165 $tax = get_taxonomy( $taxonomy );
166 if ( ! current_user_can( $tax->cap->manage_terms ) ) {
167 return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
168 }
169
170 if ( ! isset( $input['parent'] ) || ! is_taxonomy_hierarchical( $taxonomy ) ) {
171 $input['parent'] = 0;
172 }
173
174 $term = get_term_by( 'name', $input['name'], $taxonomy );
175 if ( $term ) {
176 // the same name is allowed as long as the parents are different.
177 if ( $input['parent'] === $term->parent ) {
178 return new WP_Error( 'duplicate', 'A taxonomy with that name already exists', 409 );
179 }
180 }
181
182 $data = wp_insert_term(
183 addslashes( $input['name'] ),
184 $taxonomy,
185 array(
186 'description' => isset( $input['description'] ) ? addslashes( $input['description'] ) : '',
187 'parent' => $input['parent'],
188 )
189 );
190
191 if ( is_wp_error( $data ) ) {
192 return $data;
193 }
194
195 $term = get_term_by( 'id', $data['term_id'], $taxonomy );
196
197 $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] );
198 if ( ! $return || is_wp_error( $return ) ) {
199 return $return;
200 }
201
202 /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
203 do_action( 'wpcom_json_api_objects', 'terms' );
204 return $return;
205 }
206
207 /**
208 * Update a term.
209 *
210 * - /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug
211 *
212 * @param string $path API path.
213 * @param int $blog_id Blog ID.
214 * @param int|string $slug Slug, term name.
215 * @param string $taxonomy Taxonomy.
216 */
217 public function update_term( $path, $blog_id, $slug, $taxonomy ) {
218 $tax = get_taxonomy( $taxonomy );
219 if ( ! current_user_can( $tax->cap->edit_terms ) ) {
220 return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
221 }
222
223 $term = get_term_by( 'slug', $slug, $taxonomy );
224 if ( ! $term || is_wp_error( $term ) ) {
225 return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
226 }
227
228 $args = $this->query_args();
229 $input = $this->input( false );
230 if ( ! is_array( $input ) || ! $input ) {
231 return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
232 }
233
234 $update = array();
235 if ( ! empty( $input['parent'] ) || is_taxonomy_hierarchical( $taxonomy ) ) {
236 $update['parent'] = $input['parent'];
237 }
238
239 if ( isset( $input['description'] ) ) {
240 $update['description'] = addslashes( $input['description'] );
241 }
242
243 if ( ! empty( $input['name'] ) ) {
244 $update['name'] = addslashes( $input['name'] );
245 }
246
247 $data = wp_update_term( $term->term_id, $taxonomy, $update );
248 if ( is_wp_error( $data ) ) {
249 return $data;
250 }
251
252 $term = get_term_by( 'id', $data['term_id'], $taxonomy );
253
254 $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] );
255 if ( ! $return || is_wp_error( $return ) ) {
256 return $return;
257 }
258
259 /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
260 do_action( 'wpcom_json_api_objects', 'terms' );
261 return $return;
262 }
263
264 /**
265 * Delete a term.
266 *
267 * - /sites/%s/taxonomies/%s/terms/slug:%s/delete -> $blog_id, $taxonomy, $slug
268 *
269 * @param string $path API path.
270 * @param int $blog_id Blog ID.
271 * @param int|string $slug Slug, term name.
272 * @param string $taxonomy Taxonomy.
273 */
274 public function delete_term( $path, $blog_id, $slug, $taxonomy ) {
275 $term = get_term_by( 'slug', $slug, $taxonomy );
276 $tax = get_taxonomy( $taxonomy );
277 if ( ! current_user_can( $tax->cap->delete_terms ) ) {
278 return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
279 }
280
281 if ( ! $term || is_wp_error( $term ) ) {
282 return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
283 }
284
285 $args = $this->query_args();
286 $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] );
287 if ( ! $return || is_wp_error( $return ) ) {
288 return $return;
289 }
290
291 /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
292 do_action( 'wpcom_json_api_objects', 'terms' );
293
294 wp_delete_term( $term->term_id, $taxonomy );
295
296 return array(
297 'slug' => (string) $term->slug,
298 'success' => true,
299 );
300 }
301 }
302