首页 文章

WooCommerce - 需要结帐领域

提问于
浏览
1

在我的烘焙产品网站上,我安装了WooCommerce,另一个插件叫做WooCommerce的订单交付日期 .

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

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

先感谢您!

我的网站:www.monpetitfour.com

2 回答

  • 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)) .

  • 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;
    }
    

    EDIT : 似乎字段值未保存到数据库,请尝试显式保存

    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'] ) );
        }
    }
    

相关问题