首页 > 解决方案 > 在后端显示来自 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 字段保存在用户详细信息中。但我不知道该怎么做。尝试了一些事情,但我得到的是一个非活动输入字段,其中包含已保存的结果。

标签: phpwordpresswoocommercecheckoutuser-accounts

解决方案


推荐阅读