Что эквивалентно функции wp_set_password в WooCommerce?

#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? Я пишу все в своем собственном плагине