jetpack
7 years ago
class.wpcom-json-api-add-widget-endpoint.php
8 years ago
class.wpcom-json-api-autosave-post-v1-1-endpoint.php
8 years ago
class.wpcom-json-api-bulk-delete-post-endpoint.php
8 years ago
class.wpcom-json-api-bulk-restore-post-endpoint.php
8 years ago
class.wpcom-json-api-bulk-update-comments-endpoint.php
7 years ago
class.wpcom-json-api-comment-endpoint.php
7 years ago
class.wpcom-json-api-delete-media-endpoint.php
8 years ago
class.wpcom-json-api-delete-media-v1-1-endpoint.php
8 years ago
class.wpcom-json-api-edit-media-v1-2-endpoint.php
7 years ago
class.wpcom-json-api-get-autosave-v1-1-endpoint.php
8 years ago
class.wpcom-json-api-get-comment-counts-endpoint.php
7 years ago
class.wpcom-json-api-get-comment-endpoint.php
8 years ago
class.wpcom-json-api-get-comment-history-endpoint.php
8 years ago
class.wpcom-json-api-get-comments-tree-endpoint.php
8 years ago
class.wpcom-json-api-get-comments-tree-v1-1-endpoint.php
8 years ago
class.wpcom-json-api-get-comments-tree-v1-2-endpoint.php
8 years ago
class.wpcom-json-api-get-customcss.php
8 years ago
class.wpcom-json-api-get-media-endpoint.php
8 years ago
class.wpcom-json-api-get-media-v1-1-endpoint.php
8 years ago
class.wpcom-json-api-get-media-v1-2-endpoint.php
8 years ago
class.wpcom-json-api-get-post-counts-v1-1-endpoint.php
8 years ago
class.wpcom-json-api-get-post-endpoint.php
8 years ago
class.wpcom-json-api-get-post-v1-1-endpoint.php
8 years ago
class.wpcom-json-api-get-site-endpoint.php
7 years ago
class.wpcom-json-api-get-site-v1-2-endpoint.php
8 years ago
class.wpcom-json-api-get-taxonomies-endpoint.php
8 years ago
class.wpcom-json-api-get-taxonomy-endpoint.php
8 years ago
class.wpcom-json-api-get-term-endpoint.php
8 years ago
class.wpcom-json-api-list-comments-endpoint.php
7 years ago
class.wpcom-json-api-list-embeds-endpoint.php
8 years ago
class.wpcom-json-api-list-media-endpoint.php
8 years ago
class.wpcom-json-api-list-media-v1-1-endpoint.php
8 years ago
class.wpcom-json-api-list-media-v1-2-endpoint.php
8 years ago
class.wpcom-json-api-list-post-type-taxonomies-endpoint.php
8 years ago
class.wpcom-json-api-list-post-types-endpoint.php
8 years ago
class.wpcom-json-api-list-posts-endpoint.php
8 years ago
class.wpcom-json-api-list-posts-v1-1-endpoint.php
8 years ago
class.wpcom-json-api-list-posts-v1-2-endpoint.php
8 years ago
class.wpcom-json-api-list-roles-endpoint.php
8 years ago
class.wpcom-json-api-list-shortcodes-endpoint.php
8 years ago
class.wpcom-json-api-list-terms-endpoint.php
8 years ago
class.wpcom-json-api-list-users-endpoint.php
8 years ago
class.wpcom-json-api-menus-v1-1-endpoint.php
8 years ago
class.wpcom-json-api-post-endpoint.php
7 years ago
class.wpcom-json-api-post-v1-1-endpoint.php
8 years ago
class.wpcom-json-api-render-embed-endpoint.php
8 years ago
class.wpcom-json-api-render-embed-reversal-endpoint.php
8 years ago
class.wpcom-json-api-render-endpoint.php
9 years ago
class.wpcom-json-api-render-shortcode-endpoint.php
8 years ago
class.wpcom-json-api-sharing-buttons-endpoint.php
8 years ago
class.wpcom-json-api-site-settings-endpoint.php
7 years ago
class.wpcom-json-api-site-settings-v1-2-endpoint.php
7 years ago
class.wpcom-json-api-site-settings-v1-3-endpoint.php
7 years ago
class.wpcom-json-api-site-settings-v1-4-endpoint.php
7 years ago
class.wpcom-json-api-site-user-endpoint.php
8 years ago
class.wpcom-json-api-taxonomy-endpoint.php
7 years ago
class.wpcom-json-api-update-comment-endpoint.php
8 years ago
class.wpcom-json-api-update-customcss.php
8 years ago
class.wpcom-json-api-update-media-endpoint.php
8 years ago
class.wpcom-json-api-update-media-v1-1-endpoint.php
8 years ago
class.wpcom-json-api-update-post-endpoint.php
7 years ago
class.wpcom-json-api-update-post-v1-1-endpoint.php
7 years ago
class.wpcom-json-api-update-post-v1-2-endpoint.php
7 years ago
class.wpcom-json-api-update-site-homepage-endpoint.php
8 years ago
class.wpcom-json-api-update-site-logo-endpoint.php
8 years ago
class.wpcom-json-api-update-taxonomy-endpoint.php
8 years ago
class.wpcom-json-api-update-term-endpoint.php
7 years ago
class.wpcom-json-api-update-user-endpoint.php
7 years ago
class.wpcom-json-api-upload-media-endpoint.php
8 years ago
class.wpcom-json-api-upload-media-v1-1-endpoint.php
8 years ago
class.wpcom-json-api-update-term-endpoint.php
239 lines
| 1 | <?php |
| 2 | |
| 3 | new WPCOM_JSON_API_Update_Term_Endpoint( array( |
| 4 | 'description' => 'Create a new term.', |
| 5 | 'group' => 'taxonomy', |
| 6 | 'stat' => 'terms:new', |
| 7 | 'method' => 'POST', |
| 8 | 'path' => '/sites/%s/taxonomies/%s/terms/new', |
| 9 | 'path_labels' => array( |
| 10 | '$site' => '(int|string) Site ID or domain', |
| 11 | '$taxonomy' => '(string) Taxonomy', |
| 12 | ), |
| 13 | 'request_format' => array( |
| 14 | 'name' => '(string) Name of the term', |
| 15 | 'description' => '(string) A description of the term', |
| 16 | 'parent' => '(int) The parent ID for the term, if hierarchical', |
| 17 | ), |
| 18 | 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/new', |
| 19 | 'example_request_data' => array( |
| 20 | 'headers' => array( |
| 21 | 'authorization' => 'Bearer YOUR_API_TOKEN' |
| 22 | ), |
| 23 | 'body' => array( |
| 24 | 'name' => 'Ribs & Chicken' |
| 25 | ) |
| 26 | ) |
| 27 | ) ); |
| 28 | |
| 29 | new WPCOM_JSON_API_Update_Term_Endpoint( array( |
| 30 | 'description' => 'Edit a term.', |
| 31 | 'group' => 'taxonomy', |
| 32 | 'stat' => 'terms:1:POST', |
| 33 | 'method' => 'POST', |
| 34 | 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s', |
| 35 | 'path_labels' => array( |
| 36 | '$site' => '(int|string) Site ID or domain', |
| 37 | '$taxonomy' => '(string) Taxonomy', |
| 38 | '$slug' => '(string) The term slug', |
| 39 | ), |
| 40 | 'request_format' => array( |
| 41 | 'name' => '(string) Name of the term', |
| 42 | 'description' => '(string) A description of the term', |
| 43 | 'parent' => '(int) The parent ID for the term, if hierarchical', |
| 44 | ), |
| 45 | 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/slug:testing-term', |
| 46 | 'example_request_data' => array( |
| 47 | 'headers' => array( |
| 48 | 'authorization' => 'Bearer YOUR_API_TOKEN' |
| 49 | ), |
| 50 | 'body' => array( |
| 51 | 'description' => 'The most delicious' |
| 52 | ) |
| 53 | ) |
| 54 | ) ); |
| 55 | |
| 56 | new WPCOM_JSON_API_Update_Term_Endpoint( array( |
| 57 | 'description' => 'Delete a term.', |
| 58 | 'group' => 'taxonomy', |
| 59 | 'stat' => 'terms:1:delete', |
| 60 | 'method' => 'POST', |
| 61 | 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s/delete', |
| 62 | 'path_labels' => array( |
| 63 | '$site' => '(int|string) Site ID or domain', |
| 64 | '$taxonomy' => '(string) Taxonomy', |
| 65 | '$slug' => '(string) The term slug', |
| 66 | ), |
| 67 | 'response_format' => array( |
| 68 | 'slug' => '(string) The slug of the deleted term', |
| 69 | 'success' => '(bool) Whether the operation was successful', |
| 70 | ), |
| 71 | 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/slug:$term/delete', |
| 72 | 'example_request_data' => array( |
| 73 | 'headers' => array( |
| 74 | 'authorization' => 'Bearer YOUR_API_TOKEN' |
| 75 | ), |
| 76 | ) |
| 77 | ) ); |
| 78 | |
| 79 | class WPCOM_JSON_API_Update_Term_Endpoint extends WPCOM_JSON_API_Taxonomy_Endpoint { |
| 80 | // /sites/%s/taxonomies/%s/terms/new -> $blog_id, $taxonomy |
| 81 | // /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug |
| 82 | // /sites/%s/taxonomies/%s/terms/slug:%s/delete -> $blog_id, $taxonomy, $slug |
| 83 | function callback( $path = '', $blog_id = 0, $taxonomy = 'category', $slug = 0 ) { |
| 84 | $slug = urldecode( $slug ); |
| 85 | $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) ); |
| 86 | if ( is_wp_error( $blog_id ) ) { |
| 87 | return $blog_id; |
| 88 | } |
| 89 | |
| 90 | if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) { |
| 91 | $this->load_theme_functions(); |
| 92 | } |
| 93 | |
| 94 | $user = wp_get_current_user(); |
| 95 | if ( ! $user || is_wp_error( $user ) || ! $user->ID ) { |
| 96 | return new WP_Error( 'authorization_required', 'An active access token must be used to manage taxonomies.', 403 ); |
| 97 | } |
| 98 | |
| 99 | $taxonomy_meta = get_taxonomy( $taxonomy ); |
| 100 | if ( false === $taxonomy_meta || ( |
| 101 | ! $taxonomy_meta->public && |
| 102 | ! current_user_can( $taxonomy_meta->cap->manage_terms ) && |
| 103 | ! current_user_can( $taxonomy_meta->cap->edit_terms ) && |
| 104 | ! current_user_can( $taxonomy_meta->cap->delete_terms ) ) ) { |
| 105 | return new WP_Error( 'invalid_taxonomy', 'The taxonomy does not exist', 400 ); |
| 106 | } |
| 107 | |
| 108 | if ( $this->api->ends_with( $path, '/delete' ) ) { |
| 109 | return $this->delete_term( $path, $blog_id, $slug, $taxonomy ); |
| 110 | } else if ( $this->api->ends_with( $path, '/new' ) ) { |
| 111 | return $this->new_term( $path, $blog_id, $taxonomy ); |
| 112 | } |
| 113 | |
| 114 | return $this->update_term( $path, $blog_id, $slug, $taxonomy ); |
| 115 | } |
| 116 | |
| 117 | // /sites/%s/taxonomies/%s/terms/new -> $blog_id, $taxonomy |
| 118 | function new_term( $path, $blog_id, $taxonomy ) { |
| 119 | $args = $this->query_args(); |
| 120 | $input = $this->input(); |
| 121 | if ( ! is_array( $input ) || ! $input || ! strlen( $input['name'] ) ) { |
| 122 | return new WP_Error( 'invalid_input', 'Unknown data passed', 400 ); |
| 123 | } |
| 124 | |
| 125 | $tax = get_taxonomy( $taxonomy ); |
| 126 | if ( ! current_user_can( $tax->cap->manage_terms ) ) { |
| 127 | return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 ); |
| 128 | } |
| 129 | |
| 130 | if ( ! isset( $input['parent'] ) || ! is_taxonomy_hierarchical( $taxonomy ) ) { |
| 131 | $input['parent'] = 0; |
| 132 | } |
| 133 | |
| 134 | if ( $term = get_term_by( 'name', $input['name'], $taxonomy ) ) { |
| 135 | // the same name is allowed as long as the parents are different |
| 136 | if ( $input['parent'] === $term->parent ) { |
| 137 | return new WP_Error( 'duplicate', 'A taxonomy with that name already exists', 409 ); |
| 138 | } |
| 139 | } |
| 140 | |
| 141 | $data = wp_insert_term( addslashes( $input['name'] ), $taxonomy, array( |
| 142 | 'description' => isset( $input['description'] ) ? addslashes( $input['description'] ) : '', |
| 143 | 'parent' => $input['parent'] |
| 144 | ) ); |
| 145 | |
| 146 | if ( is_wp_error( $data ) ) { |
| 147 | return $data; |
| 148 | } |
| 149 | |
| 150 | $term = get_term_by( 'id', $data['term_id'], $taxonomy ); |
| 151 | |
| 152 | $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] ); |
| 153 | if ( ! $return || is_wp_error( $return ) ) { |
| 154 | return $return; |
| 155 | } |
| 156 | |
| 157 | /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */ |
| 158 | do_action( 'wpcom_json_api_objects', 'terms' ); |
| 159 | return $return; |
| 160 | } |
| 161 | |
| 162 | // /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug |
| 163 | function update_term( $path, $blog_id, $slug, $taxonomy ) { |
| 164 | $tax = get_taxonomy( $taxonomy ); |
| 165 | if ( ! current_user_can( $tax->cap->edit_terms ) ) { |
| 166 | return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 ); |
| 167 | } |
| 168 | |
| 169 | $term = get_term_by( 'slug', $slug, $taxonomy ); |
| 170 | if ( ! $term || is_wp_error( $term ) ) { |
| 171 | return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 ); |
| 172 | } |
| 173 | |
| 174 | $args = $this->query_args(); |
| 175 | $input = $this->input( false ); |
| 176 | if ( ! is_array( $input ) || ! $input ) { |
| 177 | return new WP_Error( 'invalid_input', 'Invalid request input', 400 ); |
| 178 | } |
| 179 | |
| 180 | $update = array(); |
| 181 | if ( ! empty( $input['parent'] ) || is_taxonomy_hierarchical( $taxonomy ) ) { |
| 182 | $update['parent'] = $input['parent']; |
| 183 | } |
| 184 | |
| 185 | if ( ! empty( $input['description'] ) ) { |
| 186 | $update['description'] = addslashes( $input['description'] ); |
| 187 | } |
| 188 | |
| 189 | if ( ! empty( $input['name'] ) ) { |
| 190 | $update['name'] = addslashes( $input['name'] ); |
| 191 | } |
| 192 | |
| 193 | $data = wp_update_term( $term->term_id, $taxonomy, $update ); |
| 194 | if ( is_wp_error( $data ) ) { |
| 195 | return $data; |
| 196 | } |
| 197 | |
| 198 | $term = get_term_by( 'id', $data['term_id'], $taxonomy ); |
| 199 | |
| 200 | $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] ); |
| 201 | if ( ! $return || is_wp_error( $return ) ) { |
| 202 | return $return; |
| 203 | } |
| 204 | |
| 205 | /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */ |
| 206 | do_action( 'wpcom_json_api_objects', 'terms' ); |
| 207 | return $return; |
| 208 | } |
| 209 | |
| 210 | // /sites/%s/taxonomies/%s/terms/slug:%s/delete -> $blog_id, $taxonomy, $slug |
| 211 | function delete_term( $path, $blog_id, $slug, $taxonomy ) { |
| 212 | $term = get_term_by( 'slug', $slug, $taxonomy ); |
| 213 | $tax = get_taxonomy( $taxonomy ); |
| 214 | if ( ! current_user_can( $tax->cap->delete_terms ) ) { |
| 215 | return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 ); |
| 216 | } |
| 217 | |
| 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 | $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] ); |
| 224 | if ( ! $return || is_wp_error( $return ) ) { |
| 225 | return $return; |
| 226 | } |
| 227 | |
| 228 | /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */ |
| 229 | do_action( 'wpcom_json_api_objects', 'terms' ); |
| 230 | |
| 231 | wp_delete_term( $term->term_id, $taxonomy ); |
| 232 | |
| 233 | return array( |
| 234 | 'slug' => (string) $term->slug, |
| 235 | 'success' => true |
| 236 | ); |
| 237 | } |
| 238 | } |
| 239 |