WordPress.org

Make WordPress Core

Ticket #43442: 43442_delete.diff

File 43442_delete.diff, 1.7 KB (added by xkon, 4 years ago)

simple function for deleting comments by email

  • src/wp-admin/includes/comment.php

     
    210210        include( ABSPATH . 'wp-admin/admin-footer.php' );
    211211        die;
    212212}
     213
     214
     215/**
     216 * Delete comments by e-mail for the GDPR "Right to Anonymization"
     217 *
     218 * @since 5.0.0
     219 *
     220 * @param string $email Commenters Email
     221 *
     222 * @uses sanitize_email()
     223 * @uses is_email()
     224 * @uses get_comments()
     225 * @uses wp_delete_comment()
     226 *
     227 * @return string Returns a notification message.
     228 *
     229 */
     230
     231function delete_comments( $email ) {
     232
     233        $commenter_email = sanitize_email( $email );
     234
     235        if ( is_email( $commenter_email ) ) {
     236
     237                $args = array(
     238                        'author_email' => $commenter_email,
     239                );
     240
     241                $comments = get_comments( $args );
     242
     243                if ( ! empty( $comments ) ) {
     244                        $output = __( 'Starting the comments deletion process.' );
     245                        $output .= '
     246';
     247                        foreach ( $comments as $comment ) {
     248                                $output .= sprintf(
     249                                        // translators: %1$s is the comments ID, %2$s is the commenters email address.
     250                                        __( 'Deleting comment with ID: %1$s from %2$s.' ),
     251                                        $comment->comment_ID,
     252                                        $commenter_email
     253                                );
     254                                $output .= '
     255';
     256                                wp_delete_comment( $comment->comment_ID, true );
     257                        }
     258                        $output .= __( 'All comments have been deleted.' );
     259                        return $output;
     260                } else {
     261                        return sprintf(
     262                                // translators: %s is the commenters email address.
     263                                __( '%s has no comments.' ),
     264                                $commenter_email
     265                        );
     266                }
     267        } else {
     268                return sprintf(
     269                        // translators: %s is the email address provided.
     270                        __( '%s is not a valid e-mail.' ),
     271                        $commenter_email
     272                );
     273        }
     274
     275}