#php #wordpress #woocommerce #passwords #account
#php #wordpress #woocommerce #пароли #Учетная запись
Вопрос:
Я обнаружил, что могу настроить wp_set_password
функцию и поместить в нее свой код. Но это выполняется только тогда, когда пользователь регистрируется через /wp-login.php
.
Это был мой код:
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, и все три основные задачи, касающиеся пароля, заключаются в следующем:
- Регистрация,
- Обновление профиля,
- Сброс пароля.
Итак, этот код мне в этом не помогает, и я искал похожую функцию в WooCommerce, но я не смог ее найти. Могу ли я каким-либо образом редактировать WooCommerce подобным образом в моем пользовательском плагине и какая функция для этого предназначена?
Ответ №1:
Вам всегда следует избегать перезаписи любого основного файла, так как вы потеряете свои изменения при обновлении WordPress, и вы можете создать большие проблемы в связанных с этим разумных процессах.
В Woocommerce эквивалентом WordPress wp_set_password()
является WC_Customer
set_password()
метод.
Чтобы сделать ее подключаемой, вы можете использовать связанные с [WC_Customer_Data_Store][4]
классом перехваты, расположенные в update()
методе:
- При создании пользователя, для «регистрации пользователя», используйте
woocommerce_new_customer
action hook . - В событиях обновления пользователя используйте
woocommerce_update_customer
перехват действия - При «Регистрации пользователя» (создании пользователя) вы можете использовать
woocommerce_new_customer
перехват действия - При изменении / сохранении пароля в разделе «Моя учетная запись» > «Сведения об учетной записи» вы также можете использовать
woocommerce_save_account_details
action hook. - Когда пароль будет сброшен, вы можете использовать
woocommerce_customer_reset_passwor
перехват действия.
Пример использования WC_Customer
set_password()
метода:
// Get the WC_Customer instance object from the user ID
$customer = new WC_Customer( $user_id );
// Set password
$customer->set_password( $password );
// Save to database and sync
$customer->save();
Комментарии:
1. Привет, Луис, спасибо за твой ответ, является ли используемый в этом коде $ password форматом raw? Я не хочу создавать клиента WooCommerce, я хочу сохранить пароль при регистрации в дополнительном поле в таблице usermeta, как я могу это сделать с помощью этого метода, не затрагивая ядро WooCommerce? Я пишу все в своем собственном плагине