WooCommerce - 需要结帐领域

时间:2014-11-23 01:07:11

标签: wordpress woocommerce

在我的烘焙食品网站上,我安装了WooCommerce,另一个名为WooCommerce的订单交付日期插件。

我安装了第二个插件,因此我的客户可以为他们的商品选择交货日期,但是,我正在尝试将表单字段设为必填字段。到目前为止,我刚刚能够使该字段看起来像一个必填字段,但还没有弄清楚如何确保它实际上是强制执行的。有什么想法吗?

此外,如果有人熟悉WooCommerce,您知道我是如何做到的,以便客户在订单确认电子邮件中收到此交付日期信息吗?

提前谢谢!

我的网站:www.monpetitfour.com

2 个答案:

答案 0 :(得分:1)

你应该尝试这样的事情:

add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    // You can make your own control here
    if ( ! $_POST[ 'e_deliverydate' ] )
        wc_add_notice( __( 'Please select a delivery date' ), 'error' );
}

对于电子邮件,最简单的方法是保存元值(我认为它已经由您的插件完成)。然后,您需要复制主题上的模板电子邮件(customer-processing-order.php)并更改模板:

 <?php  $delivery_date = get_post_meta( $order->id, 'custom_field_date', true); 
 // If the plugin is well developed, you can't directly use magic getters : 
 // $delivery_date = $order->e_deliverydate;
 // Can only by use if the post meta start with _
?>
 Your delivery date is <?php echo $delivery_date ?>

您也可以使用

date_i18n( woocommerce_date_format(), strtotime( $delivery_date ) );

为了正确格式化日期。

在上面的代码中,您只需要找到插件使用的自定义字段的名称(您可以在wp_postmeta表上轻松搜索现有订单(应该是_e_deliverydate)。

答案 1 :(得分:0)

将以下代码添加到主题的functions.php文件

add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
// Check if set, if its not set add an error.
if ( ! $_POST['e_deliverydate'] )
wc_add_notice( __( 'Please select a delivery date.' ), 'error' );
} 

现在要收到显示自定义字段的电子邮件,

add_filter('woocommerce_email_order_meta_keys', 'my_woocommerce_email_order_meta_keys');

function my_woocommerce_email_order_meta_keys( $keys ) {
    $keys['Delivery Date'] = '_e_deliverydate';
    return $keys;
}

编辑:似乎字段值未保存到数据库,请尝试明确保存

add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );

function my_custom_checkout_field_update_order_meta( $order_id ) {
    if ( ! empty( $_POST['e_deliverydate'] ) ) {
        update_post_meta( $order_id, '_e_deliverydate', sanitize_text_field( $_POST['e_deliverydate'] ) );
    }
}