【问题标题】:wp_update_user not working on live serverwp_update_user 不在实时服务器上工作
【发布时间】:2017-07-21 11:42:27
【问题描述】:

我有问题。此代码创建用于更改 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');

【问题讨论】:

  • 您的实时站点上的用户表是wp_users 吗?如果不是,那可能就是问题所在。
  • 我只是好奇,有默认的 WordPress 功能可以完全满足您的要求。你为什么不用那个?
  • @stevenkelow 谢谢!

标签: php wordpress debugging


【解决方案1】:

正如 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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    相关资源
    最近更新 更多