当前位置: 首页 > 知识库问答 >
问题:

在“签出”页面上保存“选择”字段

董和风
2023-03-14

我是新来的。我不知道问题出在哪里这是我的代码

我在结账页面的账单表单中添加了一个选择字段。

问题

提交时未保存或更新记录。问题在于使用字段值更新订单元。值未在数据库中更新

// checkout page customization start

global $post, $woocommerce; 
// Account select field
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
function custom_override_checkout_fields($fields) {

     $fields['billing']['Account'] = array(
'type'          => 'select',
'class'         => array('billing form-row-wide'),
'label'         => __('Choose an Account'),
'placeholder'   => _x('Account', 'placeholder', 'woocommerce'),
'options'     => array(
                    '' => __( 'Select Account','' ),              
                    ),
'required'    => true,
 );
  return $fields;

}



add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
global $woocommerce;

if (!$_POST['Account'])
$woocommerce->add_error( __('Please enter your Account.'.$_POST['Account']));
}
///**

数据库中区域值未更新的问题

//* Update the order meta with field value
//**/
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');
function my_custom_checkout_field_update_order_meta( $order_id ) {
if ($_POST['Account']) update_post_meta( $order_id, 'Account',      esc_attr($_POST['Account']));
}

/**
* Update the user meta with field value
**/
add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta');
function my_custom_checkout_field_update_user_meta( $user_id ) {
if ($user_id && $_POST['Account']) update_user_meta( $user_id, 'Account', esc_attr($_POST['Account']) );
}

共有1个答案

阙新觉
2023-03-14

这些函数在我看来相当准确。你确定他们没有更新吗?或者也许你有困难显示它们。

我对它们做了一些调整。首先,要使用WooCommerce发送给函数的$POST变量,尽管这很简单,因为$\u POST应该是相同的。其次,当您应该使用sanitize\u text\u field()时,您正在使用esc\u attr()。前者用于在HTML属性中显示数据,而后者用于保存前清理。

//* Update the order meta with field value
//**/
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta', 10, 2 );

function my_custom_checkout_field_update_order_meta( $order_id, $posted ) {
    if ( isset( $posted['Account'] ) ){
        update_post_meta( $order_id, 'Account', sanitize_text_field( $posted['Account'] ) );
    }
}

/**
* Update the user meta with field value
**/
add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta', 10, 2 );
function my_custom_checkout_field_update_user_meta( $user_id, $posted ) {
    if ( $user_id && isset( $posted['Account'] ) ){
        update_user_meta( $user_id, 'Account', sanitize_text_field( $posted['Account'] ) );
    } 
}
 类似资料:
  • 我在单个产品页面中创建了自定义结账按钮。它工作得很好。但是在选择了结帐按钮的变化后,它会重定向到结帐页面,出现以下错误。 这是我的密码 请帮帮我。。

  • 你可以在这个步骤设置导出的文件名和路径。 勾选你想导出的对象名旁的框。如果在对象窗格高亮显示了现有的表,它将会被自动勾选并指定一个默认的文件名和位置。“导出到”文本框内的扩展名会根据在第一步选择的导出类型而改变。 【注意】导出查询结果时,请确保在运行导出向导前保存查询。否则,这里不会显示源对象。 全选按钮 描述 全选或取消全选 选择或取消选择全部源对象。 导出已选择的到相同文件 导出已选择的表到相

  • 你可以在这个步骤设置导出的文件名和路径。点击“更改”按钮来更改默认的导出位置。 勾选你想导出的对象名旁的框。如果在对象窗格高亮显示了现有的对象,它将会被自动勾选。扩展名会根据在第一步选择的导出类型而改变。如果你导出已选择的对象到相同的目标文件,你可以按住 Control 键并点按网格,然后选择“导出已选择的到相同文件”。当文件格式是 Excel,每一个对象会导出为 Excel 文件内的一个工作表。

  • 你可以在这个步骤设置导出的文件名和路径。 勾选你想导出的对象名旁的框。如果在对象窗格高亮显示了现有的表,它将会被自动勾选并指定一个默认的文件名和位置。“导出到”文本框内的扩展名会根据在第一步选择的导出类型而改变。 【注意】导出查询结果时,请确保在运行导出向导前保存查询。否则,这里不会显示源对象。 全选按钮 描述 全选或取消全选 选择或取消选择全部源对象。 导出已选择的到相同文件 导出已选择的表到相

  • 在这里,我可以绑定多选择的选择列表。当我试图保存时,我没有得到一个错误,但它没有保存官员信息。 下面是试图加载页面时出现的错误 处理请求时发生未处理的异常。SQLException:无效的列名'OfficerID'。Microsoft.data.sqlclient.sqlCommand+<>c.b__164_0(任务结果)

  • 本文向大家介绍选择在HTML中的剃刀Html.DropDownListFor()的页面加载上选择了哪个选项?,包括了选择在HTML中的剃刀Html.DropDownListFor()的页面加载上选择了哪个选项?的使用技巧和注意事项,需要的朋友参考一下 速记用于确定在剃刀Html.DropDownListFor()的页面加载上选择了哪个选项。您可以尝试运行以下代码片段-