如何在验证自定义域时使用lostpassword_post挂钩添加WP_ERROR?

时间:2015-04-24 作者:Shamim Hasan

我在lostpassword表单中添加了一个自定义字段(captcha),使用lostpassword_form 钩但当我要用lostpassword_post 挂钩i无法添加wp\\U错误。我试过了hook for lostpassword form 也尝试过$errors = new WP_Error(); 代替global $errors; 但运气不好。

我不想

包含错误消息的模具脚本。例如:。wp_die(\'error\');是否有方法添加wp\\U错误?如果没有,为什么WordPress没有添加do_action( \'lostpassword_post\', $errors ); 而不是do_action( \'lostpassword_post\' );

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

As of WordPress 4.4, 行动lostpassword_post 通过$errors 对象:

function wpse_185243_lastpassword_post( $errors ) {
    if ( ! $captcha_valid /* The result of your captcha */ ) {
        $errors->add( \'invalid_captcha\', \'<strong>ERROR:</strong> Try again sonny.\' );
    }
}

add_action( \'lostpassword_post\', \'wpse_185243_lastpassword_post\' );
<小时>

Pre 4.4 legacy answer

这是您所指的相关代码(retrieve_password() 在里面wp-login.php):

function retrieve_password() {
    $errors = new WP_Error();

    // Some error checking

    do_action( \'lostpassword_post\' );

    if ( $errors->get_error_code() )
        return $errors;


    // Some more code

    /**
     * Filter whether to allow a password to be reset.
     *
     * @since 2.7.0
     *
     * @param bool true           Whether to allow the password to be reset. Default true.
     * @param int  $user_data->ID The ID of the user attempting to reset a password.
     */
    $allow = apply_filters( \'allow_password_reset\', true, $user_data->ID );

    if ( ! $allow )
        return new WP_Error(\'no_password_reset\', __(\'Password reset is not allowed for this user\'));
    else if ( is_wp_error($allow) )
        return $allow;
}
正如你所说,没有办法$errors (这是一个局部变量,永远不会传递给筛选器/操作-可能值得在trac票证中提交功能请求)。

但是,您似乎可以使用allow_password_reset 返回新的WP_Error, WordPress将以与核心错误相同的方式处理它:

function wpse_185243_lost_password_captcha( $result, $user_id ) {   
    if ( ! $captcha_valid /* The result of your captcha */ ) {
        $result = new WP_Error( \'invalid_captcha\', \'<strong>ERROR:</strong> Try again sonny.\' );
    }

    return $result;
}

add_filter( \'allow_password_reset\', \'wpse_185243_lost_password_captcha\', 10, 2 );

结束

相关推荐

命名空间中未找到PasswordHash

我是WordPress开发的新手,来自纯OO背景,我熟悉PHP/WordPress中的面向对象。我在entities\\Member有一个类,它是通过autoloader实现加载的。这些东西我很熟悉,到目前为止,我还没有在代码中真正使用WordPress特定的函数。对于成员,我想使用插件中的内置密码哈希函数。php文件,但出于某种原因,自动加载程序尝试将PasswordHash函数作为一个类“查找”,而不应该这样做?我已经浏览了可能的解决方案,但这似乎是WordPress中的一个限制,它在PHP 5+中处