如何将函数应用于GET_USER_BY的值$EMAIL以覆盖EMAIL_EXISTS?

时间:2021-03-17 作者:imagIne

更精确的问题:如何覆盖email_exists 通过get_user_by ?

我已选择从数据库中呈现不可用/不可读的电子邮件地址。

在向管理员和用户(用户注册)发送电子邮件后,我向电子邮件地址添加了一些元素(字符),然后我必须删除这些添加的元素,以验证电子邮件是否存在,是否显示在用户帐户上,是否用于邮件列表。

要解密电子邮件,我必须使用substr 关联值的位置$email 字段get_user_by 删除之前添加的元素。我读到了email_exists 使用get_user_by 这是一个可插入功能。但我不知道如何使用get_user_by 在…内email_exists.

有可能吗?我该怎么办?

        function get_user_by( $field, $db_email ) {
            $field = \'email\';
            //function to decrypt my email from database
            $ex = preg_split(\'\\\'@\\\'\', $nr , -1);
            $dem = substr(substr($ex[0],2),0,-2);
            $rdem = substr($dem,0,2).substr($dem,2+1,strlen($dem)-2);
            $db_email = $rdem. \'@\' .$ex[1];
            
            $userdata = WP_User::get_data_by( \'email\', $db_email );

            if ( ! $userdata ) {
                return false;
            }

            $user = new WP_User;
            $user->init( $userdata );

        return $user;
        }
        
        function email_exists( $email ) {
            $user = get_user_by( $field, $db_email );
            if ( $user ) {
                $user_id = $user->ID;
            } else {
                $user_id = false;
            }
            return apply_filters( \'email_exists\', $user_id, $email );
        }
        
        if (email_exists($email)){
            lq_errors()->add("emailexists","This email address already exist");
        }

1 个回复
SO网友:butlerblog

根据您的代码,我认为问题可能是您检查了一个未定义的变量。你在检查$db_email, 它在函数中是一个未定义的值,因此您将查找一个空结果。您需要检查传递给的值email_exists() (这将是表单中正在验证的电子邮件)。

如果您的可插拔get_user_by() 函数的结果相当于您如何混淆电子邮件,如果电子邮件存在,那么您应该得到正确的匹配。

function email_exists( $email ) {
    // You had this as checking $db_email, which would have been
    // undefined. It should be checking for the value passed to
    // this function - $email.
    $user = get_user_by( \'email\', $email );
    if ( $user ) {
        $user_id = $user->ID;
    } else {
        $user_id = false;
    }
    return apply_filters( \'email_exists\', $user_id, $email );
}

相关推荐

Throttling email frequency

我有一个工作委员会网站,运行着wp job manager,通常发送电子邮件的次数很低,但偶尔一个操作会触发数百名收件人的电子邮件更新,以了解列表状态的变化或雇主在申请人列表上的状态变化。我目前通过Dreamhost使用WP Mail SMTP发送。Dreamhost的电子邮件限制为每小时100封。由于这些状态更新和来自该站点的大多数电子邮件都不太需要时间,我正在寻找一种解决方案,即将电子邮件指令排队,每分钟只发送一封电子邮件,和/或计算过去人力资源中发送的数量,当达到某个上限时,延迟队列,然后重新开始。