下面的代码用于在woocommerce签出中添加自定义order字段:
function delivery_time_slots_array () {
return array(
'' => _('Choose a time slot'),
'5pm - 6pm' => __('5pm - 6pm', 'woocommerce'),
'6pm - 7pm' => __('6pm - 7pm', 'woocommerce'),
'7pm - 8pm' => __('7pm - 8pm', 'woocommerce'),
'8pm - 9pm' => __('8pm - 9pm', 'woocommerce')
);
}
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
$fields['order']['order_delivery_time'] = array(
'type' => 'select',
'label' => __('Delivery time (choose an hour slot between 5pm & 9pm)', 'woocommerce'),
'class' => array('form-row-wide'),
'required' => true,
'options' => delivery_time_slots_array()
);然后,使用以下代码更新具有字段值的order元:
add_action( 'woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta', 10, 2 );
function custom_checkout_field_update_order_meta( $order_id ) {
if ( ! empty( $_POST['order_delivery_time'] ) ) {
update_post_meta( $order_id, 'Delivery time', sanitize_text_field($_POST['order_delivery_time']) );
}
}这一切都正确地显示并返回woocommerce的Orders部分中的值。但是,我无法访问这些数据来返回/显示在“感谢”页面上。我目前正在使用以下代码:
<li class="delivery_slot">
<?php _e( 'Delivery Slot', 'woocommerce' ); ?>
<strong><?php
$delivery_slots = delivery_time_slots_array();
$delivery_slot = get_post_meta($order_id, 'Delivery time', true);
if( isset($delivery_slots[$delivery_slot]) )
echo $delivery_slots[$delivery_slot];
?></strong>我在这里回顾了两个小时的文章&在Google上,包括下面的示例(我的代码镜像),但无法获得显示的值:
发布于 2015-12-11 03:47:43
如果将其附加到order-details.php模板中的任何钩子上,那么$order对象将在回调函数中可用。
function so_34215698_display_order_meta( $order ){
$delivery_slots = delivery_time_slots_array()
$delivery_slot = get_post_meta($order->id, 'Delivery time', true);
if( isset($delivery_slots[$delivery_slot]) )
echo $delivery_slots[$delivery_slot];
}
add_action( 'woocommerce_order_details_after_order_table', 'so_34215698_display_order_meta' );https://stackoverflow.com/questions/34215698
复制相似问题