wp_update_user无法在实时服务器上运行

时间:2017-07-21 11:42:28

标签: php wordpress debugging

我有问题。此代码创建用于更改WP用户密码和用户显示名称。我的代码正在我的本地主机上工作但相同的代码不能正常工作。我的代码有什么问题?总是显示错误!

function pass_change_form()
{
    global $wpdb;
    $user_email     = $_POST["user_email"]; 
    $full_name      = $_POST["full_name"];
    $password       = $_POST["password"];
    $re_password    = $_POST["re_password"];

    $results = $wpdb->get_results("SELECT * FROM wp_users WHERE user_email = '$user_email'");
    //var_dump($results);
    $id         = $results[0]->ID;
    $user_login = $results[0]->user_login;
    $user_email = $results[0]->user_email;

    if(empty($re_password)){
        $user_data = wp_update_user( array( 
                        'ID'            =>  $id, 
                        'user_login'    =>  $user_login,
                        'user_email'    =>  $user_email,
                        'display_name'  =>  $full_name ) );

                        if ( is_wp_error( $user_data ) ) {
                            echo 'Error';
                        } else {
                            echo 1;
                        }
    }
    else{
        $user_data = wp_update_user( array( 
                        'ID'            =>  $id, 
                        'user_login'    =>  $user_login,
                        'user_email'    =>  $user_email,
                        'user_pass'     =>  $re_password, 
                        'display_name'  =>  $full_name ) );

                        if ( is_wp_error( $user_data ) ) {
                            echo 'Error';
                        } else {
                            echo 0;
                        }
    } 
    die;
}
add_action( 'wp_ajax_pass_change_form', 'pass_change_form' );
add_action('wp_ajax_nopriv_pass_change_form', 'pass_change_form');

1 个答案:

答案 0 :(得分:0)

正如Berend de Groot在上面的评论中提到的那样,为什么要重写密码更改流程? WP内置了一个可以为您完成此功能的功能。有关如何使用该信息的信息,请参阅wp_set_password() https://codex.wordpress.org/Function_Reference/wp_set_password

至于你的代码,下面将完全相同,只是重写为更清洁并使用已有的功能。

function pass_change_form() {
    $user_email     = $_POST["user_email"]; 
    $password       = $_POST["password"];
    $re_password    = $_POST["re_password"];

    $user = get_user_by('email', $user_email);

    // Why use empty() to check a string? Is 're_password' an array?
    if($user && !empty($re_password)) {
        wp_set_password($re_password, $user->ID);
    }

    die;
}
add_action( 'wp_ajax_pass_change_form', 'pass_change_form' );
add_action('wp_ajax_nopriv_pass_change_form', 'pass_change_form');