Получить значение пароля в кассе WooCommerce - PullRequest
2 голосов
/ 16 июня 2020

Есть ли способ получить чистое нехешированное значение пароля на странице оформления заказа WooCommerce с помощью любого крючка?

Что мне нужно сделать: мне нужно создать пользователя Firebase Auth, когда создается новый пользователь WordPress . Если это невозможно, что было бы лучше всего для достижения этого?

Что я пробовал

Сначала я попытался создать новое настраиваемое поле при оформлении заказа и получить это с:

function wh_CustomReadOrder($order_id)
{
    $order = wc_get_order($order_id);
    WC()->session = new WC_Session_Handler;

    /*
    * Next lets create a customer so we can access checkout fields
    * If you will check a constructor for WC_Customer class you will see
    * that if you will not provide user to create customer it will use some
    * default one. Magic.
    */
    WC()->customer = new WC_Customer;

    /*
    * Done. You can browse all chceckout fields (including custom ones)
    */
    ?>
  <script type="text/javascript">
      var order = <?php echo $order ?>;
      var checkout_fields = <?php echo json_encode(WC()->checkout->checkout_fields) ?>

      var email = order;
      console.log(checkout_fields);
  </script>
    <?php
}

add_action('woocommerce_thankyou', 'wh_CustomReadOrder');

Я получаю массив со всеми полями, но мое настраиваемое поле не отображается. Но даже в этом случае пароль WordPress все равно будет другим. Лучше всего просто получить пароль WordPress, а затем создать пользователя в Firebase.

У вас есть идеи?

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Как вы увидите в файле wc-user-functions.php, функция wc_create_new_customer используется при создании новой учетной записи.


Для проверки страницы оформления заказа вы можете использовать Условные теги

  • is_checkout() Возвращает true на странице оформления заказа.

Итак, чтобы перехватить нехешированный пароль можно с помощью ловушки woocommerce_created_customer. Переменная $unhashed_password будет содержать нехешированный пароль.

function action_woocommerce_created_customer ( $customer_id, $new_customer_data, $password_generated ) {    
    // Returns true on the checkout page.
    if ( is_checkout() ) {
        $unhashed_password = $new_customer_data[user_pass];
    }
}
add_action( 'woocommerce_created_customer', 'action_woocommerce_created_customer', 10, 3 );
2 голосов
/ 16 июня 2020

Один из подходов, который я бы рассмотрел, - это создание настраиваемой веб-формы для создания учетной записи клиента. Таким образом, вы можете манипулировать данными, как хотите.

Например, когда пользователь отправляет форму, принимает данные, регистрирует нового пользователя в WC / WP, отправляет данные в firebase, а затем перенаправляет.

Обратной стороной является то, что вам придется управлять процессом на 100% и обрабатывать любые возможные ошибки.

Другой способ:

Используйте W C по умолчанию или Форма создания учетной записи WP, но при отправке -> запретить значение по умолчанию с помощью Javascript, взять данные (да, вы можете получить доступ к паролю до его хеширования), отправить его в Firebase, ЗАТЕМ, отправить форму и позволить WC / WP сохранить ее в базу данных обычным образом.

Я сделал это так, когда мне нужно было отправить эти данные в программу управления электронной почтой. Пользователь вводит значения, нажимает submit: мой код блокирует событие отправки, отправляет данные туда, куда я хочу, а затем отправляет форму.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...