【问题标题】:How to save from WooCommerce checkout a custom checkbox field state?如何从 WooCommerce 结帐中保存自定义复选框字段状态?
【发布时间】:2021-04-03 10:36:44
【问题描述】:

我对 update_post_meta 函数有疑问。 我有一个用户提交的值,我通过 $_POST 传递,然后保存到发布元数据。

一切正常,但当值为 '0' 时,帖子元不会更新。

这是我的代码:

// Add custom checkout field: woocommerce_review_order_before_submit
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field_ritiro_sede' );
function my_custom_checkout_field_ritiro_sede() {
    echo '<div class="cw_custom_class"><h3>'.__('Ritiro presso sede CER S.r.l. &nbsp').'</h3>';
    echo '<div id="my_custom_checkout_field">';
    woocommerce_form_field( 'ritiro_sede', array(
        'type'      => 'checkbox',
        'class'     => array('input-checkbox'),
        'label'     => __('SI'),
    ),  WC()->checkout->get_value( 'ritiro_sede' ) );
    echo '</div>';
}

// Save the custom checkout field in the order meta, when checkbox has been checked
add_action( 'woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta_ritiro_sede', 10, 1 );
function custom_checkout_field_update_order_meta_ritiro_sede( $order_id ) {

    if ( ! empty( $_POST['ritiro_sede'] ) )
        update_post_meta( $order_id, 'ritiro_sede', $_POST['ritiro_sede'] );
    if ( isset( $_POST['ritiro_sede'] ) )
        update_post_meta( $order_id, 'ritiro_sede', $_POST['0'] );
    
}

有谁知道可能出了什么问题?

【问题讨论】:

  • 关于您的代码的一些注释。缺少关闭 div。所以用echo '&lt;/div&gt;&lt;/div&gt;';替换echo '&lt;/div&gt;';

标签: php wordpress checkbox woocommerce checkout


【解决方案1】:

自 WooCommerce 3 以来,以下是将自定义结帐复选框字段值保存为订单元数据的最佳方法(包括未选中复选框时)

// Save the custom checkout checkbox field as the order meta
add_action( 'woocommerce_checkout_create_order', 'custom_checkout_field_update_order_meta', 10, 2 );
function custom_checkout_field_update_order_meta( $order, $data ) {
    $value = isset($_POST['ritiro_sede']) ? '1' : '0'; // Set the correct values
    
    $order->update_meta_data( 'ritiro_sede', $value );
}

现在,WC_Checkout get_value() 方法在您的第一个函数中使用用户元数据:

WC()->checkout->get_value( 'ritiro_sede' )

因此,如果您希望下次购买时在结帐页面上显示提交的值,则需要将该自定义结帐字段也保存为用户元数据,而不是使用以下内容:

// Save the custom checkout checkbox field as the order meta and user meta
add_action( 'woocommerce_checkout_create_order', 'custom_checkout_field_update_order_meta', 10, 2 );
function custom_checkout_field_update_order_meta( $order, $data ) {
    $value = isset($_POST['ritiro_sede']) ? '1' : '0'; // Set the correct values
    
    // Save as custom order meta data
    $order->update_meta_data( 'ritiro_sede', $value );

    // Save as custom user meta data
    if ( get_current_user_id() > 0 ) {
        update_user_meta( get_current_user_id(), 'ritiro_sede', $value );
    }
}

代码进入活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 2020-09-02
    • 1970-01-01
    • 2017-03-21
    • 2021-07-10
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多