wordpress 在WooCommerce结账中获取密码值

nxowjjhe  于 2023-01-04  发布在  WordPress
关注(0)|答案(2)|浏览(144)

是否有任何方法可以在WooCommerce结帐页面中使用任何钩子来检索干净的未散列密码值?
我需要做什么:当一个新的WordPress用户正在创建时,我需要创建一个Firebase Auth用户。如果这是不可能的,什么是实现这一点的最佳实践?
"我所尝试的"
首先,我尝试在 checkout 时创建一个新的自定义字段,并使用以下命令检索它:

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中创建用户。
你知道吗?

xytpbqjk

xytpbqjk1#

正如您将在wc-user-functions.php文件中看到的,函数wc_create_new_customer在创建新帐户时使用。
要检查结帐页面,可以使用Conditional Tags

  • is_checkout()在 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 );
aiqt4smr

aiqt4smr2#

我会考虑的一种方法是建立一个自定义的web表单来创建客户的帐户,这样你就可以随心所欲地操作数据。
例如,当用户提交表单时,获取数据,在WC/WP中注册新用户,将数据发送到firebase,然后重定向。
缺点是你必须100%地管理这个过程,并处理任何可能的错误。
另一种方式:
使用默认的WC或WP帐户创建表单,但在提交-〉防止默认与Javascript,采取数据(是的,你可以访问密码之前,它的散列),将其发送到Firebase,然后,提交表单,让WC/WP保存在数据库中的正常方式。
当我需要将数据发送到电子邮件管理软件时,我是这样做的。用户输入值,点击提交:我的代码会阻止submit事件,将数据发送到所需的位置,然后提交表单。
希望能有所帮助!

相关问题