我使用以下代码添加发货日期字段,并能够阻止某些日期。这通常工作正常,但是,该信息不会添加到订单和电子邮件的管理部分。
谁能帮我理解缺少哪一部分?
// Register main datepicker jQuery plugin script
add_action( 'wp_enqueue_scripts', 'enabling_date_picker' );
function enabling_date_picker() {
// Only on front-end and checkout page
if( is_admin() || ! is_checkout() ) return;
// Load the datepicker jQuery-ui plugin script
wp_enqueue_script( 'jquery-ui-datepicker' );
wp_enqueue_style('jquery-ui', "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/smoothness/jquery-ui.css", '', '', false);
}
// Add custom checkout datepicker field
add_action( 'woocommerce_checkout_shipping', 'datepicker_custom_field' );
function datepicker_custom_field($checkout) {
$datepicker_slug = 'my_datepicker';
echo '<div id="datepicker-wrapper">';
woocommerce_form_field($datepicker_slug, array(
'type' => 'text',
'class'=> array( 'form-row-first my-datepicker'),
'label' => __('Fecha de entrega'),
'required' => true, // Or false
), '' );
echo '<br clear="all"></div>';
// Jquery: Enable the Datepicker
?>
<script language="javascript">
jQuery( function($){
var dates = ['2024-11-01', '2024-11-02', '2024-11-03'];
var a = '#<?php echo $datepicker_slug ?>';
$(a).datepicker({
beforeShowDay: function(date)
{
var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
return [dates.indexOf(string) == -1];
}
});
});
</script>
<?php
}
// Save custom fields data
add_action('woocommerce_checkout_update_order_meta', 'rfds_save_custom_checkout_fields');
function rfds_save_custom_checkout_fields($order_id) {
if (!empty($_POST['datepicker_custom_field'])) {
update_post_meta($order_id, '_datepicker_custom_field', sanitize_text_field($_POST['datepicker_custom_field']));
}
}
首先,主要错误是您需要使用“my_datepicker”字段名称参数。
现在,您可能不再使用
woocommerce_checkout_update_order_meta
旧挂钩,它与高性能订单存储(HPOS)并不真正兼容。相反,您可以使用:
woocommerce_checkout_create_order
(有 $order
和 $data
参数),woocommerce_checkout_order_created
(有 $order
参数)所以尝试以下方法:
add_action( 'woocommerce_checkout_create_order', 'save_custom_checkout_date_picker_value', 20, 2 );
function save_custom_checkout_date_picker_value( $order, $data ) {
$datepicker_slug = 'my_datepicker';
if (isset($_POST[$datepicker_slug]) && !empty($_POST[$datepicker_slug]) ) {
$order->add_meta_data( 'delivery_date', sanitize_text_field($_POST[$datepicker_slug], true ) );
}
}
现在您可以使用以下方法从 WC_Order 对象检索并显示交货日期:
if ( $delivery_date = $order->get_meta('delivery_date') ){
echo '<p>' . $delivery_date . '</p>';
}
请参阅 在 WooCommerce 订单详细信息中保存自定义结帐交货时间字段值答案,以在管理订单、客户订单和电子邮件通知中显示交货日期。