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