PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.3.1
Jetpack – WP Security, Backup, Speed, & Growth v14.3.1
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-list-comments-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 1 year 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 1 year ago class.wpcom-json-api-update-post-v1-1-endpoint.php 1 year 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-list-comments-endpoint.php
381 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2
3 /**
4 * Comments Walker Class.
5 */
6 class WPCOM_JSON_API_List_Comments_Walker extends Walker {
7
8 /**
9 * Tree type.
10 *
11 * @var string
12 */
13 public $tree_type = 'comment';
14
15 /**
16 * Database fields.
17 *
18 * @var array
19 */
20 public $db_fields = array(
21 'parent' => 'comment_parent',
22 'id' => 'comment_ID',
23 );
24
25 /**
26 * Start the element output.
27 *
28 * @param array $output - the output.
29 * @param object $object - the object.
30 * @param int $depth - depth.
31 * @param array $args - the arguments.
32 * @param int $current_object_id - the object ID.
33 */
34 public function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
35 if ( ! is_array( $output ) ) {
36 $output = array();
37 }
38
39 $output[] = $object->comment_ID;
40 }
41
42 /**
43 * Taken from WordPress's Walker_Comment::display_element()
44 *
45 * This function is designed to enhance Walker::display_element() to
46 * display children of higher nesting levels than selected inline on
47 * the highest depth level displayed. This prevents them being orphaned
48 * at the end of the comment list.
49 *
50 * Example: max_depth = 2, with 5 levels of nested content.
51 * 1
52 * 1.1
53 * 1.1.1
54 * 1.1.1.1
55 * 1.1.1.1.1
56 * 1.1.2
57 * 1.1.2.1
58 * 2
59 * 2.2
60 *
61 * @see Walker_Comment::display_element()
62 * @see Walker::display_element()
63 * @see wp_list_comments()
64 *
65 * @param object $element — Data object.
66 * @param array $children_elements - List of elements to continue traversing (passed by reference).
67 * @param int $max_depth — Max depth to traverse.
68 * @param int $depth — Depth of current element.
69 * @param array $args — An array of arguments.
70 * @param string $output — Used to append additional content (passed by reference).
71 */
72 public function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
73
74 if ( ! $element ) {
75 return;
76 }
77
78 $id_field = $this->db_fields['id'];
79 $id = $element->$id_field;
80
81 parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
82
83 // If we're at the max depth, and the current element still has children, loop over those and display them at this level
84 // This is to prevent them being orphaned to the end of the list.
85 if ( $max_depth <= $depth + 1 && isset( $children_elements[ $id ] ) ) {
86 foreach ( $children_elements[ $id ] as $child ) {
87 $this->display_element( $child, $children_elements, $max_depth, $depth, $args, $output );
88 }
89
90 unset( $children_elements[ $id ] );
91 }
92 }
93 }
94
95 new WPCOM_JSON_API_List_Comments_Endpoint(
96 array(
97 'description' => 'Get a list of recent comments.',
98 'group' => 'comments',
99 'stat' => 'comments',
100
101 'method' => 'GET',
102 'path' => '/sites/%s/comments/',
103 'path_labels' => array(
104 '$site' => '(int|string) Site ID or domain',
105 ),
106
107 'allow_fallback_to_jetpack_blog_token' => true,
108
109 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/comments/?number=2',
110 )
111 );
112
113 new WPCOM_JSON_API_List_Comments_Endpoint(
114 array(
115 'description' => 'Get a list of recent comments on a post.',
116 'group' => 'comments',
117 'stat' => 'posts:1:replies',
118
119 'method' => 'GET',
120 'path' => '/sites/%s/posts/%d/replies/',
121 'path_labels' => array(
122 '$site' => '(int|string) Site ID or domain',
123 '$post_ID' => '(int) The post ID',
124 ),
125
126 'allow_fallback_to_jetpack_blog_token' => true,
127
128 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/posts/7/replies/?number=2',
129 )
130 );
131
132 /**
133 * List comment endpoint.
134 *
135 * /sites/%s/comments/ -> $blog_id
136 * /sites/%s/posts/%d/replies/ -> $blog_id, $post_id
137 * /sites/%s/comments/%d/replies/ -> $blog_id, $comment_id
138 *
139 * @todo permissions
140 */
141 class WPCOM_JSON_API_List_Comments_Endpoint extends WPCOM_JSON_API_Comment_Endpoint { // phpcs:ignore
142
143 /**
144 * The response format.
145 *
146 * @var array
147 */
148 public $response_format = array(
149 'found' => '(int) The total number of comments found that match the request (ignoring limits, offsets, and pagination).',
150 'site_ID' => '(int) The site ID',
151 'comments' => '(array:comment) An array of comment objects.',
152 );
153
154 /**
155 * Constructor function.
156 *
157 * @param array $args - the arguments.
158 */
159 public function __construct( $args ) {
160 parent::__construct( $args );
161 $this->query = array_merge(
162 $this->query,
163 array(
164 'number' => '(int=20) The number of comments to return. Limit: 100. When using hierarchical=1, number refers to the number of top-level comments returned.',
165 'offset' => '(int=0) 0-indexed offset. Not available if using hierarchical=1.',
166 'page' => '(int) Return the Nth 1-indexed page of comments. Takes precedence over the <code>offset</code> parameter. When using hierarchical=1, pagination is a bit different. See the note on the number parameter.',
167 'order' => array(
168 'DESC' => 'Return comments in descending order from newest to oldest.',
169 'ASC' => 'Return comments in ascending order from oldest to newest.',
170 ),
171 'hierarchical' => array(
172 'false' => '',
173 'true' => '(BETA) Order the comment list hierarchically.',
174 ),
175 'after' => '(ISO 8601 datetime) Return comments dated on or after the specified datetime. Not available if using hierarchical=1.',
176 'before' => '(ISO 8601 datetime) Return comments dated on or before the specified datetime. Not available if using hierarchical=1.',
177 'type' => array(
178 'any' => 'Return all comments regardless of type.',
179 'comment' => 'Return only regular comments.',
180 'trackback' => 'Return only trackbacks.',
181 'pingback' => 'Return only pingbacks.',
182 'pings' => 'Return both trackbacks and pingbacks.',
183 ),
184 'status' => array(
185 'approved' => 'Return only approved comments.',
186 'unapproved' => 'Return only comments in the moderation queue.',
187 'spam' => 'Return only comments marked as spam.',
188 'trash' => 'Return only comments in the trash.',
189 'all' => 'Return comments of all statuses.',
190 ),
191 'author_wpcom_data' => array(
192 'false' => 'Do not add wpcom_id and wpcom_login fields to comment author responses (default)',
193 'true' => 'Add wpcom_id and wpcom_login fields to comment author responses',
194 ),
195 )
196 );
197 }
198
199 /**
200 * The callback.
201 *
202 * @param string $path - the path.
203 * @param int $blog_id - the blog ID.
204 * @param int $object_id - the object ID.
205 */
206 public function callback( $path = '', $blog_id = 0, $object_id = 0 ) {
207 $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
208 if ( is_wp_error( $blog_id ) ) {
209 return $blog_id;
210 }
211
212 $args = $this->query_args();
213
214 if ( $args['number'] < 1 ) {
215 $args['number'] = 20;
216 } elseif ( 100 < $args['number'] ) {
217 return new WP_Error( 'invalid_number', 'The NUMBER parameter must be less than or equal to 100.', 400 );
218 }
219
220 if ( str_contains( $path, '/posts/' ) ) {
221 // We're looking for comments of a particular post.
222 $post_id = $object_id;
223 $comment_id = 0;
224 } else {
225 // We're looking for comments for the whole blog, or replies to a single comment.
226 $comment_id = $object_id;
227 $post_id = 0;
228 }
229
230 // We can't efficiently get the number of replies to a single comment.
231 $count = false;
232 $found = -1;
233
234 if ( ! $comment_id ) {
235 // We can get comment counts for the whole site or for a single post, but only for certain queries.
236 if ( 'any' === $args['type'] && ! isset( $args['after'] ) && ! isset( $args['before'] ) ) {
237 $count = $this->api->wp_count_comments( $post_id );
238 }
239 }
240
241 switch ( $args['status'] ) {
242 case 'approved':
243 $status = 'approve';
244 if ( $count ) {
245 $found = $count->approved;
246 }
247 break;
248 default:
249 if ( ! current_user_can( 'edit_posts' ) ) {
250 return new WP_Error( 'unauthorized', 'User cannot read non-approved comments', 403 );
251 }
252 if ( 'unapproved' === $args['status'] ) {
253 $status = 'hold';
254 $count_status = 'moderated';
255 } elseif ( 'all' === $args['status'] ) {
256 $status = 'all';
257 $count_status = 'total_comments';
258 } else {
259 $status = $args['status'];
260 $count_status = $args['status'];
261 }
262 if ( $count ) {
263 $found = $count->$count_status;
264 }
265 }
266
267 /** This filter is documented in class.json-api.php */
268 $exclude = apply_filters(
269 'jetpack_api_exclude_comment_types',
270 array( 'order_note', 'webhook_delivery', 'review', 'action_log' )
271 );
272
273 $query = array(
274 'order' => $args['order'],
275 'type' => 'any' === $args['type'] ? false : $args['type'],
276 'status' => $status,
277 'type__not_in' => $exclude,
278 );
279
280 if ( isset( $args['page'] ) ) {
281 if ( $args['page'] < 1 ) {
282 $args['page'] = 1;
283 }
284 } elseif ( $args['offset'] < 0 ) {
285 $args['offset'] = 0;
286 }
287
288 if ( ! $args['hierarchical'] ) {
289 $query['number'] = $args['number'];
290
291 if ( isset( $args['page'] ) ) {
292 $query['offset'] = ( $args['page'] - 1 ) * $args['number'];
293 } else {
294 $query['offset'] = $args['offset'];
295 }
296
297 $is_before = isset( $args['before_gmt'] );
298 $is_after = isset( $args['after_gmt'] );
299
300 if ( $is_before || $is_after ) {
301 $query['date_query'] = array(
302 'column' => 'comment_date_gmt',
303 'inclusive' => true,
304 );
305
306 if ( $is_before ) {
307 $query['date_query']['before'] = $args['before_gmt'];
308 }
309
310 if ( $is_after ) {
311 $query['date_query']['after'] = $args['after_gmt'];
312 }
313 }
314 }
315 if ( $args['hierarchical'] && $found > 5000 ) {
316 // Massive comment thread found; don't pre-load comment metadata to reduce memory used.
317 $query['update_comment_meta_cache'] = false;
318 }
319
320 if ( $post_id ) {
321 $post = get_post( $post_id );
322 if ( ! $post || is_wp_error( $post ) ) {
323 return new WP_Error( 'unknown_post', 'Unknown post', 404 );
324 }
325 $query['post_id'] = $post->ID;
326 if ( $this->api->ends_with( $this->path, '/replies' ) ) {
327 $query['parent'] = 0;
328 }
329 } elseif ( $comment_id ) {
330 $comment = get_comment( $comment_id );
331 if ( ! $comment || is_wp_error( $comment ) ) {
332 return new WP_Error( 'unknown_comment', 'Unknown comment', 404 );
333 }
334 $query['parent'] = $comment_id;
335 }
336
337 $comments = get_comments( $query );
338
339 if ( $args['hierarchical'] ) {
340 $walker = new WPCOM_JSON_API_List_Comments_Walker();
341 $comment_ids = $walker->paged_walk( $comments, get_option( 'thread_comments_depth', -1 ), isset( $args['page'] ) ? $args['page'] : 1, $args['number'] );
342 if ( ! empty( $comment_ids ) ) {
343 $comments = array_map( 'get_comment', $comment_ids );
344 }
345 }
346
347 $return = array();
348
349 foreach ( array_keys( $this->response_format ) as $key ) {
350 switch ( $key ) {
351 case 'found':
352 $return[ $key ] = (int) $found;
353 break;
354 case 'site_ID':
355 $return[ $key ] = (int) $blog_id;
356 break;
357 case 'comments':
358 $return_comments = array();
359 if ( ! empty( $comments ) ) {
360 foreach ( $comments as $comment ) {
361 $the_comment = $this->get_comment( $comment->comment_ID, $args['context'] );
362 if ( $the_comment && ! is_wp_error( $the_comment ) ) {
363 $return_comments[] = $the_comment;
364 }
365 }
366 }
367
368 if ( $return_comments ) {
369 /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
370 do_action( 'wpcom_json_api_objects', 'comments', count( $return_comments ) );
371 }
372
373 $return[ $key ] = $return_comments;
374 break;
375 }
376 }
377
378 return $return;
379 }
380 }
381