Updated:您只是忘记为每个取货地点添加不同的“信息”:
// Now save the pickup location data to the order meta
add_action( 'woocommerce_checkout_update_order_meta', 'store_pickup_field_update_order_meta', 10, 1 );
function store_pickup_field_update_order_meta( $order_id ) {
// Only for chosen "option_1" and "option_2"
if ( $_POST['store_pickup'] == 'option_1' || $_POST['store_pickup'] == 'option_2' ){
// 1. Set the data in an array, conditionally on chosen option value
$collect_info = __('Order can be picked up between ');
if( $_POST['store_pickup'] == 'option_1' ){
$data = array(
'location' => __('Crossroads Farmers’ Market'),
'address' => __('1235 26 Avenue SW<br> Calgary, Alberta<br> T2G 1R7'),
'info' => $collect_info . __('9:00am - 5:00pm on Friday-Sunday')
);
} else {
$data = array(
'location' => __('Market on Macleod'),
'address' => __('7711 Macleod Trail S<br> Calgary, Alberta<br> T2H 0M1'),
'info' => $collect_info . __('9:00am - 5:00pm on Thursday-Sunday')
);
}
// 2. Set the data in a formatted HTML string
$data_html = "<h3>Pickup Information</h3>
<table class='pickup td' cellspacing='0' cellpadding='6'>
<tr>
<th>Location:</th>
<td>".$data['location']."</td>
</tr>
<tr>
<th><strong>Adress:</strong></th>
<td>".$data['address']."</td>
</tr>
<tr>
<th><strong>Info:</strong></th>
<td>".$data['info']."</td>
</tr>
</table><br>";
// 3. Save the data to the Order meta data
// Pickup html formated data
update_post_meta( $order_id, '_store_pickup_data', $data_html );
// Pickup location
update_post_meta( $order_id, '_store_pickup_location', $data['location'] );
}
}
你的 jQuery 代码也可以简化一点:
// Add opening hours for each location
add_action( 'woocommerce_after_checkout_form', 'shop_opening_hours', 6 );
function shop_opening_hours() {
?>
<script type="text/javascript">
(function($){
$('#store_pickup_val').change( function(){
$( ".shop-collection" ).remove();
if (this.value == 'option_1') {
$( "<p>Order can be picked up between 9am - 5pm on Friday-Sunday</p>" ).addClass("shop-collection").insertAfter( "#store_pickup_val" );
$('#shipping_method_0_local_pickup3').prop('checked', true);
} else if (this.value == 'option_2') {
$( "<p>Order can be picked up between 9pm - 5pm on Thursday-Sunday</p>" ).addClass("shop-collection").insertAfter( "#store_pickup_val" );
$('#shipping_method_0_local_pickup3').prop('checked', true);
} else {
$('#shipping_method_0_flat_rate1').prop('checked', true);
}
$('body').trigger('update_checkout');
});
})(jQuery);
</script>
<?php
}
代码位于活动子主题(或主题)的 function.php 文件中或任何插件文件中。
经过测试并有效。您将得到:
For "option_1"
收到订单/查看订单页面|电子邮件通知
For "option_2"
收到订单/查看订单页面|电子邮件通知
一个建议:
在第一个代码函数(最后)中,您可以通过以下方式将所有非格式化数据保存在数组中,而不是仅保存拾取位置(非格式化数据):
// Save all Pickup non formatted data array
update_post_meta( $order_id, '_store_pickup', $data );
因此,要访问这些数据,您只需使用:
$data = get_post_meta( $order_id, '_store_pickup', true );
$pickup_location = $data['location'];
$pickup_address = $data['address'];
$pickup_info = $data['info'];
这样您就可以确保在订单中保存可访问的非格式化完整提货数据。
在这种情况下,这可以替换:
$pickup_location = get_post_meta( $order->get_id(), '_store_pickup_location', true );
改为使用:
$pickup_location = get_post_meta( $order->get_id(), '_store_pickup', true )['location'];
所以你可以明确删除取货位置保存功能......