web-dev-qa-db-ja.com

スパムアカウントを一括削除する

ボットは徐々にゆっくりと私たちの存在を引き継いでおり、最大のキャプチャやガードさえもが失敗するでしょう。その結果、大量のスパムアカウントが削除される必要があります。

Wp-admin経由でこれらを手動で削除するのは面倒です。これらを素早く削除する方法はありますか?

2

はい。これを行うにはさまざまな方法があります。主に、 wp_delete_user() 関数に取り組む必要があります。

あなたの最初の仕事、そしてトリッキーな仕事は、どのアカウントがスパムで、どれが本物であるかを識別することです。あなたのサイトが定期的に新しいユーザーを獲得するなら、これはかなり冒険になることができます。

次の例では、ユーザーのemailアカウントとmeta_dataの2つの値をターゲットにしています。

この場合、電子メールアドレスを解釈することによって、それがスパムアカウントであるかどうかがわかります。それでは、配列にリストを追加しましょう。

$emails = array(
    '[email protected]',
    '[email protected]',
    '[email protected]',
);

次に、pointsという名前のカスタムユーザーメタデータがあります。

$meta_key = 'points';

そして私たちの場合、メタキーの値が10であれば、間違いなくスパムユーザーであることがわかります。そこで値を設定します。

$meta_key = 10;

それでは、それを関数にまとめましょう。

function wpse_delete_users_by_email($emails, $meta_key, $meta_value) {

    if (!is_array($emails)) return;

    foreach ($emails as $email) {

        // get user data via email
        $user = get_user_by( 'email', $email );
        $user_id = $user->ID;
        $user_email = $user->user_email;

        // get
        $meta_data = get_user_meta($user_id, $meta_key, TRUE);

        // if meta data equals the meta value
        if ($meta_data == $meta_value) {

            // confirm that emails match
            if ($user_email == $email) {

                // must include this, or it will throw a 'call to undefined function' error
                require_once(ABSPATH.'wp-admin/includes/user.php' );

                // delete spam user
                wp_delete_user( $user_id );

                // display results
                echo '<br>' . $email;

            }

        }

    }

}

単純なものですが、時々スパムやボットを扱うとき、頭痛が少なくなることは価値があります。

1