覆盖EMAIL_EXISTS函数

时间:2014-09-30 作者:fightstarr20

我正在尝试重写email\\u exists函数,以稍微修改它的工作方式。它没有被列为可插拔功能,所以我不确定该怎么做。

我希望发生以下情况

有人试图用现有的电子邮件地址注册,Wordpress检测到这是一个重复的电子邮件地址,而Wordpress会自动为其分配一个随机的电子邮件地址,是否可以使用过滤器?

更新-----我现在在我的函数文件中有这个。。。

add_filter(
    \'pre_user_email\',
    \'wpse163079_pre_user_email_example\'
);
function wpse163079_pre_user_email_example(
    $user_email
) {
    if ( email_exists( $user_email ) ) {
        $user_email = \'[email protected]\';
        return $user_email;
    } else {
        return $user_email;
    }
}
但这不起作用,它仍然会给我一条信息:“一个帐户已经用你的电子邮件地址注册了。”。请登录\'

1 个回复
最合适的回答,由SO网友:Nicolai Grossherr 整理而成

注意:这对OP不起作用的原因是使用了woocommerce,否则,就核心WordPress功能而言,这应该按说明进行。

<小时>Update:

我以为是关于注册的电子邮件。幸好你指定了你的需求。WordPress尝试-执行多个检查-添加新用户wp_insert_user - source: user.php. 过滤器在这里pre_user_email, 您可以将其用于您的目的。

示例性用法如下:

add_filter(
    \'pre_user_email\',
    \'wpse163079_pre_user_email_example\'
);
function wpse163079_pre_user_email_example(
    $user_email
) {
    if ( email_exists( $user_email ) ) {
        // code that generates the random email address
        // do not forget to check if the random one does exist
        // assign random address as new $user_email then
        return $user_email;
    } else {
        return $user_email;
    }
}

无法覆盖email_exists() 因为它不是一个可插入的函数。但看看source: user.php 显示:

function email_exists( $email ) {
        if ( $user = get_user_by(\'email\', $email) )
                return $user->ID;

       return false;
}
所以email_exists() 使用get_user_by() - source: pluggable.php -, 另一方面,它是一个可插入的函数,因此您可以重写它。如你所见get_user_by() 看起来是这样的:

function get_user_by( $field, $value ) {
        $userdata = WP_User::get_data_by( $field, $value );

        if ( !$userdata )
                return false;

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

        return $user;
}
因此,没有钩子操作或过滤器,您可以使用。但它表明,这主要是WP_User 类别-source: capabilities.php. 在查看get_data_by() 的方法WP_User 课堂上你会看到没有可用的钩子。

你没有写下你想做的事。也许你可以通过简单地覆盖get_user_by(). 另一种可能是extend 这个WP_User 班对于给定的信息,我真的说不出更多,但这应该是一个很好的起点。

结束

相关推荐

Filters on Login Page

我正在尝试使用修改登录页built in filters. add\\u操作按预期工作,但我无法使筛选器工作。这是我函数中的代码。php:add_filter( \'login_form_top\', \'filter_top_login\' ); function filter_top_login( $content ) { return \'This is what I want it to say!\'; } 但当我加载wp登录时,它似乎没有做任何