为了账号安全,请及时绑定邮箱和手机立即绑定

在 WooCommerce 中的结帐和我的帐户之间同步时事通讯自定义复选框

在 WooCommerce 中的结帐和我的帐户之间同步时事通讯自定义复选框

PHP
白板的微信 2021-12-24 09:22:48
我想将 WooCommerce 结帐页面中的自定义复选框字段与“我的帐户”页面中的类似字段(当用户登录时)同步。这是我的代码:// Show a checkbox in checkout page and in My account > Detailsadd_action( 'woocommerce_edit_account_form', 'display_checkbox_in_account_page' );add_action( 'woocommerce_after_order_notes', 'display_checkbox_in_account_page' );function display_checkbox_in_account_page() {    woocommerce_form_field( 'newsletter-account', array(        'type'  => 'checkbox',        'class' => array('form-row-wide'),        'label' => __( 'Subscribe to my newsletter', 'woocommerce' ),    ), get_user_meta(get_current_user_id(), 'newsletter-account', true ) );}// Save checkbox value when saved in My account > Detailsadd_action( 'woocommerce_save_account_details', 'save_checkbox_value_from_account_details', 10, 1 );function save_checkbox_value_from_account_details( $user_id ) {    $value = isset( $_POST['newsletter-account'] ) ? '1' : '0';    update_user_meta( $user_id, 'newsletter-account', $value );}这两个代码块工作正常:如果在我的帐户 > 详细信息中我选中了复选框,则首选项将被保存,我也可以在结帐页面中看到一个选中的复选框。现在的问题是,当我从结帐页面编辑我的时事通讯首选项时,我需要一种方法来获得相同的结果。我想我需要使用 woocommerce_checkout_create_order 但我不知道如何编码://Save the checkbox value when customer edit it from the checkout pageadd_action( 'woocommerce_checkout_create_order', 'save_checkbox_value_from_checkout_page'. 10, 1 );function save_checkbox_value_from_checkout_page() {    //some code here}任何建议表示赞赏。
查看完整描述

1 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

更新


该挂钩woocommerce_checkout_create_order用于订单元数据,您需要将结帐newsletter-account字段值保存/更新为用户元数据……


所以最好使用专用的woocommerce_checkout_update_customer钩子。


这是您的完整代码(已测试和工作):


add_action( 'woocommerce_edit_account_form', 'display_checkbox_in_account_page' );

add_action( 'woocommerce_after_order_notes', 'display_checkbox_in_account_page' );

function display_checkbox_in_account_page() {

    woocommerce_form_field( 'newsletter-account', array(

        'type'  => 'checkbox',

        'class' => array('form-row-wide'),

        'label' => __( 'Subscribe to my newsletter', 'woocommerce' ),

    ), get_user_meta( get_current_user_id(), 'newsletter-account', true ) );

}



// Save/update checkbox value when saved in My account > Details

add_action( 'woocommerce_save_account_details', 'save_checkbox_value_from_account_details', 10, 1 );

function save_checkbox_value_from_account_details( $user_id ) {

    $value = isset( $_POST['newsletter-account'] ) ? '1' : '0';

    update_user_meta( $user_id, 'newsletter-account', $value );

}


// Save/update custom checkout field value as user meta data

add_action('woocommerce_checkout_update_customer','custom_checkout_checkbox_update_customer', 100, 2 );

function custom_checkout_checkbox_update_customer( $customer, $data ){

    $value = isset( $_POST['newsletter-account'] ) ? '1' : '0';

    update_user_meta( $customer->get_id(), 'newsletter-account', $value ); // Updated

}

代码位于活动子主题(或活动主题)的 functions.php 文件中。


现在,如果您想在订单之外获取该信息作为订单元数据,您将使用:


add_action('woocommerce_checkout_create_order','custom_checkout_checkbox_add_order_meta', 100, 2 );

function custom_checkout_checkbox_add_order_meta( $order, $data ){

    $value = isset( $_POST['newsletter-account'] ) ? '1' : '0';

    $order->update_meta_data( 'newsletter-account', $value );

}


查看完整回答
反对 回复 2021-12-24
  • 1 回答
  • 0 关注
  • 178 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号