wp-admin/includes/comment.php:54Updates a comment with values provided in $_POST.
int|WP_Errorfunction edit_comment() { if ( ! current_user_can( 'edit_comment', (int) $_POST['comment_ID'] ) ) { wp_die( __( 'Sorry, you are not allowed to edit comments on this post.' ) ); } if ( isset( $_POST['newcomment_author'] ) ) { $_POST['comment_author'] = $_POST['newcomment_author']; } if ( isset( $_POST['newcomment_author_email'] ) ) { $_POST['comment_author_email'] = $_POST['newcomment_author_email']; } if ( isset( $_POST['newcomment_author_url'] ) ) { $_POST['comment_author_url'] = $_POST['newcomment_author_url']; } if ( isset( $_POST['comment_status'] ) ) { $_POST['comment_approved'] = $_POST['comment_status']; } if ( isset( $_POST['content'] ) ) { $_POST['comment_content'] = $_POST['content']; } if ( isset( $_POST['comment_ID'] ) ) { $_POST['comment_ID'] = (int) $_POST['comment_ID']; } if ( isset( $_POST['comment_parent'] ) ) { $comment_id = (int) $_POST['comment_ID']; $comment_parent = (int) $_POST['comment_parent']; $_POST['comment_parent'] = $comment_parent; $comment = get_comment( $comment_id ); if ( $comment && $comment_parent && $comment_parent !== (int) $comment->comment_parent ) { if ( ! get_option( 'thread_comments' ) ) { return new WP_Error( 'comment_parent_invalid', __( 'The comment parent cannot be changed because threaded comments are disabled.' ) ); } if ( $comment_parent === $comment_id ) { return new WP_Error( 'comment_parent_invalid', __( 'A comment cannot be a reply to itself.' ) ); } $parent = get_comment( $comment_parent ); $parent_status = $parent ? wp_get_comment_status( $parent ) : false; $comment_status = $_POST['comment_approved'] ?? $comment->comment_approved; $comment_is_approved = in_array( $comment_status, array( 1, '1', 'approve' ), true ); // The parent must be a comment of the same type, on the same post, and publicly visible if the comment is approved. if ( ! $parent || (int) $parent->comment_post_ID !== (int) $comment->comment_post_ID || $parent->comment_type !== $comment->comment_type || in_array( $parent_status, array( 'spam', 'trash' ), true ) || ( $comment_is_approved && 'approved' !== $parent_status ) ) { return new WP_Error( 'comment_parent_invalid', __( 'Invalid parent comment.' ) ); } // Walk up the new parent's ancestors to prevent creating a threading loop. $ancestors = array(); $ancestor = $parent; $parent_depth = 1; while ( $ancestor && $ancestor->comment_parent && ! isset( $ancestors[ $ancestor->comment_ID ] ) ) { if ( (int) $ancestor->comment_parent === $comment_id ) { return new WP_Error( 'comment_parent_invalid', __( 'A comment cannot be a reply to one of its own replies.' ) ); } $ancestors[ $ancestor->comment_ID ] = true; ++$parent_depth; $ancestor = get_comment( $ancestor->comment_parent ); } $max_thread_depth = (int) get_option( 'thread_comments_depth' ); if ( $max_thread_depth ) { /* * The comment's replies move with it, so the whole subtree must stay within * the maximum depth. Measure its height one level of replies at a time, * stopping as soon as the subtree cannot fit, which also bounds the loopIntroduced in 2.0.0. Unchanged from 6.7.7 through 7.1.0.
Signature, return type and hooks compared across 5 parsed releases.
src/wp-admin/includes/comment.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.