php - 在后端显示来自 Woocommerce 中选择结帐字段的选项键
问题描述
我按照@LoicTheAztec的这个答案(在后端显示来自Woocommerce下拉结帐字段的选项标签)中的说明进行操作,但根据我的需要对其进行了一些定制。
因此,我想通过自定义获得的是将客户在结账时下订单时给出的结果保存到默认的 Woocommerce 订单字段 shipping_company。
最后,我得到了这个,但我得到的是一个选项值而不是一个选项键,在我将 shipping_company 字段结果检索到电子邮件模板和其他地方后,它看起来不太好。您可以在屏幕截图中看到它我在编辑订单面板中得到的内容
在这里您可以看到整个编辑后的代码:
function spende_options_array(){
return array( 'nova_poshta' => __( 'Nova Poshta', 'woocommerce' ), 'justin' => __( 'Justin', 'woocommerce' ), 'ukrposhta' => __( 'UkrPoshta', 'woocommerce' ) );
}
add_filter( 'woocommerce_checkout_fields', 'add_custom_checkout_field' );
function add_custom_checkout_field($fields){
$fields['shipping_company'] = array( 'shipping_company' => array(
'type' => 'select',
'label' => __( 'Shipping Company', 'woocommerce' ),
'options' => spende_options_array(),
'required' => true,
) );
return $fields;
}
add_action('woocommerce_before_checkout_shipping_form','add_extra_checkout_field' );
function add_extra_checkout_field(){
$checkout = WC()->checkout();
?>
<div>
<?php
foreach ( $checkout->checkout_fields['shipping_company'] as $key => $field ) :
woocommerce_form_field( $key, $field, $checkout->get_value( $key ) );
endforeach;
?>
</div>
<?php
}
//Saving the code into Admin Order
add_action( 'woocommerce_checkout_create_order', 'save_extra_checkout_fields', 10, 2 );
function save_extra_checkout_fields( $order, $posted ){
if( isset( $posted['shipping_company'] ) && in_array( $posted['shipping_company'], array( 'nova_poshta' , 'justin', 'ukrposhta' ) ) ) {
$order->update_meta_data( '_shipping_company', $posted['shipping_company'] );
}
}
//Show the result in Admin Order as extra field (with normal option key)
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'display_order_custom_meta_data_in_admin' );
function display_order_custom_meta_data_in_admin( $order ){
$spende_options = spende_options_array();
$key = get_post_meta( $order->get_id(), '_shipping_company', true );
?>
<div class="order_data_column">
<p><strong><?php _e( 'Shipping Company', 'woocommerce' ); ?>: </strong><?php echo $spende_options[$key]; ?></p>
</div>
<?php
}
此外,我想在我的编辑帐户送货地址页面的结帐页面上显示相同的选择选项字段,并能够更改给定的结果并将其作为 shipping_company 字段保存在用户详细信息中。但我不知道该怎么做。尝试了一些事情,但我得到的是一个非活动输入字段,其中包含已保存的结果。
解决方案
推荐阅读
- c++ - 在没有对象参数的情况下调用非静态成员函数时发生错误
- java - 多个持续错误 IntelliJ
- linux - Libreoffice 转换为 pdf 日期格式语言
- plesk - Plesk Maria DB 管理员密码在从 5.5 升级到 10.2 后更改
- java - 将 gmt 转换为 ist 不可解析的日期异常
- javascript - 无法在发布请求中修复 CORS
- django - 如果 get_or_created 插入数据,则返回 id,django
- git - 如何在执行 git 模块时解决剧本错误
- css - 是什么导致 Edge 浏览器上的切换失败?
- php - laravel api 和 web 中的请求文件有什么行为差异吗?