Display comment parent meta box in WordPress

/**
 * Displays comment "Parent" meta box.
 *
 * @see https://wpcodebook.com/comment-parent-wordpress/
 * @see https://developer.wordpress.org/reference/classes/wp_comment/
 * @see https://developer.wordpress.org/reference/hooks/add_meta_boxes_comment/
 * @see https://developer.wordpress.org/reference/functions/add_meta_box/
 * @see https://developer.wordpress.org/reference/functions/wp_nonce_field/
 *
 * @param WP_Comment $comment Comment object.
 */
add_action( 'add_meta_boxes_comment', function ( $comment ) {
	add_meta_box(
		'wpcodebook-comment-parent',
		__( 'Parent' ),
		function ( $comment ) {
			printf(
				'<input type="number" min="0" name="%s" value="%d">',
				'wpcodebook_comment_parent',
				$comment->comment_parent
			);
			wp_nonce_field(
				"wpcodebook-comment-parent-{$comment->comment_ID}",
				'_wpcodebook_nonce'
			);
		},
		'comment',
		'normal'
	);
} );

/**
 * Saves comment "Parent" meta box content.
 *
 * @see https://wpcodebook.com/comment-parent-wordpress/
 * @see https://developer.wordpress.org/reference/hooks/edit_comment/
 * @see https://developer.wordpress.org/reference/functions/wp_update_comment/
 * @see https://developer.wordpress.org/reference/functions/wp_verify_nonce/
 *
 * @param int $comment_id Comment ID.
 */
add_action( 'edit_comment', function ( $comment_id ) {
	if ( isset( $_POST['wpcodebook_comment_parent'] ) ) {

		// Comment parent ID
		$comment_parent = absint( $_POST['wpcodebook_comment_parent'] );
		unset( $_POST['wpcodebook_comment_parent'] );

		// Check nonce
		if (
			! isset( $_POST['_wpcodebook_nonce'] ) ||
			! wp_verify_nonce(
				$_POST['_wpcodebook_nonce'],
				"wpcodebook-comment-parent-{$comment_id}"
			)
		) {
			wp_die( esc_html__( 'Invalid nonce.' ) );
		}

		// Set comment parent
		wp_update_comment( array(
			'comment_ID'     => $comment_id,
			'comment_parent' => $comment_parent,
		) );

	}
} );

Leave a Comment