Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何保存自定义复选框字段状态?_Php_Wordpress_Checkbox_Woocommerce_Checkout - Fatal编程技术网

Php 如何保存自定义复选框字段状态?

Php 如何保存自定义复选框字段状态?,php,wordpress,checkbox,woocommerce,checkout,Php,Wordpress,Checkbox,Woocommerce,Checkout,我对update_post_元函数有问题。 我有一个用户提交的值,我通过$\u POST传递它,然后保存到POST meta 一切正常,但当值为“0”时,post meta不会更新 这是我的代码: // Add custom checkout field: woocommerce_review_order_before_submit add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field_ritiro_sede

我对update_post_元函数有问题。 我有一个用户提交的值,我通过$\u POST传递它,然后保存到POST meta

一切正常,但当值为“0”时,post meta不会更新

这是我的代码:

// 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'] );
    
}
//在提交前添加自定义签出字段:woocommerce\u review\u order\u
添加操作(“订单注释后的woocommerce”、“我的自定义”结帐“字段”和“批改”);
函数my\u custom\u checkout\u field\u ritiro\u sede(){
回音“。”(Ritiro presso sede CER S.r.l.);
回声';
woocommerce_表单_字段('ritiro_sede',数组(
'键入'=>'复选框',
'class'=>array('input-checkbox'),
'label'=>\'SI',
),WC()->checkout->get_value('ritiro_sede');
回声';
}
//选中复选框后,在订单元中保存自定义签出字段
添加操作('woocommerce\u checkout\u update\u order\u meta','custom\u checkout\u field\u update\u order\u meta\u ritiro\u sede',10,1);
函数自定义\签出\字段\更新\订单\元\权限\ sede($order\ id){
如果(!空($\u POST['ritiro\u sede']))
更新帖子元($order_id,'ritiro_sede',$_post['ritiro_sede');
如果(isset($_POST['ritiro\u sede']))
更新发布元数据($order\u id,'ritiro\u sede',$\u post['0']);
}

有人知道哪里可能出错吗?

自从WooCommerce 3以来,下面是将自定义签出复选框字段值保存为订单元数据的最佳方法(包括取消选中复选框时):

现在,由于用户元数据由
WC\u Checkout
get\u 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文件。已测试并运行。

请注意您的代码。缺少一个结束div。因此,替换
echo'带有
echo''
// 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 );
    }
}