web-dev-qa-db-ja.com

著者のEメールに基づくコメントを拒否

申し込みがないと電子メールが有効であるとは保証できないことはわかっていますが、問題のあるユーザーが@example.comという電子メールアドレスを使用していることに気付きました。

コメントの作者のためにそのようなドメインのブラックリストをどのようにして維持するのですか?具体的には、そのようなドメインが使用されているとユーザーにその旨を知らせる場合、どうすればコメントをすぐに拒否できますか。

wp_die('you must use a real email');がうまくいく可能性がありますが、どのフィルタをいつチェックするべきですか?

1
Tom J Nowell

これはフィルタのための提案です:

/**
 * Filters a comment's approval status before it is set.
 *
 * @since 2.1.0
 * @since 4.9.0 Returning a WP_Error value from the filter will shortcircuit comment insertion and
 *              allow skipping further processing.
 *
 * @param bool|string|WP_Error $approved    The approval status. Accepts 1, 0, 'spam' or WP_Error.
 * @param array                $commentdata Comment data.
 */
$approved = apply_filters( 'pre_comment_approved', $approved, $commentdata );

私たちができる場所 Gabriel Livan でEメールドメインパーサーを試してください。

add_filter( 'pre_comment_approved', function( $approved, $commentdata ) {
    $domain = substr( strrchr( $commentdata['comment_author_email'], '@' ), 1 );
    $banned_domains = [
        'example.com',
        'example.org',
        'example.net',
        'localhost'
    ];
    if ( in_array( $domain, $banned_domains ) ) {
        wp_die( __( 'Please use a real email!' ) );
        //return new WP_Error( 'comment_real_email', __( 'Please use a real email!' ) );
    }
    return $approved;
}, 10, 2 );

$banned_domainsは、データベースに保存される前に停止したいメールドメインのリストです。

早く発射するもう一つのものです:

/**
 * Filters a comment's data before it is sanitized and inserted into the database.
 *
 * @since 1.5.0
 *
 * @param array $commentdata Comment data.
 */
$commentdata = apply_filters( 'preprocess_comment', $commentdata );
2
birgire