在结帐页面上,有一些交付方式,如果选择了一种特定的交付方式(仅1种),则应显示一个带有交付时间的下拉列表。该字段是使用带有Repeater的ACF插件实现的,字段类型是Text。用户选择的时间应显示在WooCommerce管理面板的订单详细信息中。
根据获得的主题代码,我编写了下一个代码:
<div id="delivery_times" class="form-group d-none">
<label class="text-bold" for="select_time">Delivery time: </label>
<select id="select_time" class="form-control mb-1">
<option value="" selected>Select time</option>
<?php
$delivery_times = get_field('delivery_times', 'options');
$count = 0;
foreach ($delivery_times as $delivery_time):
echo '<option value="'.$delivery_time['range_time'].'" data-pickup="'.$count.'">'.$delivery_time['range_time'].'</option>';
$count++;
endforeach;
?>
</select>
</div>
$("#shipping_speed").change(function(){
var delivery_time = $(this).children("option:selected").data("type");
if(delivery_time == "tomorrow"){
$("#delivery_times").removeClass("d-none");
}else{
$("#delivery_times").addClass("d-none");
$("#select_time option[value='']").prop('selected',true);
}
});
现在,我需要保存选定的数据,并以某种方式在管理员的订单详细信息中显示它,但是我没有在主题中实现类似的实现。请告诉我如何将这些数据从ACF字段保存到订单详细信息?
更新:
首先在您的html上缺少<select>
attibute name="select_time"
,因此请替换以下行:
<select id="select_time" class="form-control mb-1">
通过这一行:
<select id="select_time" name="select_time" class="form-control mb-1">
现在,您可以使用以下代码片段将所选值保存为订单元数据:
// Save the custom checkout field as the order meta
add_action( 'woocommerce_checkout_create_order', 'custom_checkout_field_update_order_meta', 10, 2 );
function custom_checkout_field_update_order_meta( $order, $data ) {
if ( isset($_POST['select_time']) ) {
$order->update_meta_data( 'delivery_time', esc_attr($_POST['select_time']) );
}
}
然后将其显示在收货地址下的管理单个订单页面中:
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'display_admin_order_select_time_custom_field' );
function display_admin_order_select_time_custom_field( $order ){
$delivery_time = $order->get_meta('delivery_time');
if( ! empty($delivery_time) ) {
echo '<p class="delivery_time"><strong>'. __("Delivery time", "woocommerce").'</strong>: '.$delivery_time.'</p>';
}
}
然后,您可以在客户订单和电子邮件通知上显示此交货时间:
add_filter( 'woocommerce_get_order_item_totals', 'delivery_time_as_order_item_total_row', 10, 3 );
function delivery_time_as_order_item_total_row( $total_rows, $order, $tax_display ){
$delivery_time = $order->get_meta( 'delivery_time' ); // Get delivery time
$new_total_rows = array(); // Initializing
if( empty($delivery_time) ) {
return $total_rows; // Exit
}
// Loop through total rows
foreach( $total_rows as $key => $value ){
if( 'payment_method' == $key ) {
$new_total_rows['delivery_time'] = array(
'label' => __("Delivery time", "woocommerce"),
'value' => $delivery_time,
);
}
$new_total_rows[$key] = $total_rows[$key];
}
return $new_total_rows;
}
代码进入活动子主题(或活动主题)的functions.php文件中。它应该工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句