如何使用 WooCommerce 挂钩 wp_set_password WordPress 功能?

How to hook in wp_set_password WordPress function with WooCommerce?

我正在尝试更改 wp_set_password 可插入函数并向其添加自定义操作:

function wp_set_password( $password, $user_id ) {
    // Keep original WP code
    global $wpdb;

    $hash = wp_hash_password( $password );
    $wpdb->update(
        $wpdb->users,
        array(
            'user_pass'           => $hash,
            'user_activation_key' => '',
        ),
        array( 'ID' => $user_id )
    );

    wp_cache_delete( $user_id, 'users' );

    // and now add your own
    $custom_hash = password_hash( $password, PASSWORD_DEFAULT );
    update_user_meta($user_id, 'user_pass2', $custom_hash);
}

我将此代码放入我的自定义插件中,但它没有 运行 我在其中编写的自定义操作。我不确定是什么问题。

也许我把它放在了错误的位置或者我应该在某个地方调用它?

如何使用 WooCommerce 挂钩 wp_set_password() WordPress 功能?


编辑

这段代码根本没有触发,我试图在用户中输入相同的密码 table 但它不关心我的代码并执行默认操作。


编辑 2

我注释了插件中的代码并更改了 wp-includes 文件夹中的主要 pluggable.php 文件,并添加了这两行。

$custom_hash = $password;
update_user_meta($user_id, 'user_pass2', $custom_hash);

但是还是不行


编辑 3

我什至删除了 pluggable.php 中的整个功能,它仍然有效!我已经为新用户创建了用户名和密码。

应该是WooCommerce注册。我使用 WooCommerce 登录系统。


编辑 4

我使用了 WordPress 注册系统 /wp-login.php,这段代码终于可以用了。

现在我想知道关于 WooCommerce,我可以在哪里以及如何实现这样的目标,用自定义的东西更新 wp_usermeta table。

You should always avoid to overwrite any core file, as you will loose your changes when WordPress will be updated and you can make big trouble in this related sensible processes.

您可以尝试使用 WC_Customer() Class available setters methods,例如:

// Get an instance of the WC_Customer Object from the user ID
$customer = new WC_Customer( $user_id );

// Set password
$customer->set_password( $password );

// Set other metadata
$customer->set_first_name( $first_name );
$customer->set_last_name( $last_name );

// Save to database (and sync cached data)
$customer->save();

You can use the Woocommerce related hooks from WC_Customer_Data_Store Class:


添加 - 使用 Woocommerce 创建客户:

1) 您可以使用 wc_create_new_customer() 函数 return 用户 ID。

2) 或者您可以使用 WC_Customer 对象的空实例,在其上使用任何设置器可用方法 (并且它将 return 在用户 ID 的末尾) :

// Get an empty instance of the WC_Customer Object
$customer = new WC_Customer();

// Set username and display name
$customer->set_username( $user_name );
$customer->set_display_name( string $display_name )

// Set user email
$customer->set_email( $user_email );
$customer->set_display_name( $display_name );

// Set First name and last name
$customer->set_first_name( $first_name );
$customer->set_billing_first_name( $first_name );
$customer->set_last_name( $last_name );
$customer->set_billing_last_name( $last_name );

// Set password
$customer->set_password( $password );

// Set other metadata
$customer->set_billing_first_name( $first_name );
$customer->set_billing_last_name( $last_name );

// Save to database - returns the User ID (or a WP Error) 
$user_id = $customer->save();