我的WooCommerce结账表的时间选择器

我的WooCommerce结账表的时间选择器,woocommerce,Woocommerce,是否有人知道我可以添加到主题中的任何代码,以便我的结账表单包含一个用于选择交货时间的字段?我的网站是monpetitfour.com 编辑: 因此,我发现编码可以输出时间选项供客户选择,但我想知道如何将他们选择的选项记录在woocommerce的“谢谢”页面和客户与管理员的新订单电子邮件中?代码如下: <p class="form-row my-field-class form-row-wide woocommerce-validated" id="time_slot_field"

是否有人知道我可以添加到主题中的任何代码,以便我的结账表单包含一个用于选择交货时间的字段?我的网站是monpetitfour.com

编辑: 因此,我发现编码可以输出时间选项供客户选择,但我想知道如何将他们选择的选项记录在woocommerce的“谢谢”页面和客户与管理员的新订单电子邮件中?代码如下:

<p class="form-row my-field-class form-row-wide woocommerce-validated" 
   id="time_slot_field">
<label for="time_slot" class="">Choose a Delivery Time</label>
<select name="time_slot" id="time_slot" class="select" required="true">  
<option value="">Select</option>
<option value="07:00 AM - 07:30 AM">07:00 AM - 07:30 AM</option>
<option value="07:30 PM - 08:00 AM">07:30 AM - 08:00 AM</option>
<option value="08:00 AM - 08:30 AM">08:00 AM - 08:30 AM</option>    
....    
</select></p>

选择交货时间 挑选 上午7:00-上午7:30 上午7:30-上午8:00 上午8:00-上午8:30 ....

如下所述,创建自定义签出字段的方法如下:

// Add a new checkout field
function kia_filter_checkout_fields($fields){
    $fields['extra_fields'] = array(
            'some_field' => array(
                'type' => 'text',
                'required'      => true,
                'label' => __( 'Some field' )
                )
            );

    return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'kia_filter_checkout_fields' );

// display the extra field on the checkout form
function kia_extra_checkout_fields(){ 

    $checkout = WC()->checkout(); ?>

    <div class="extra-fields">
    <h3><?php _e( 'Additional Fields' ); ?></h3>

    <?php foreach ( $checkout->checkout_fields['extra_fields'] as $key => $field ) : ?>

            <?php woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); ?>

        <?php endforeach; ?>
    </div>

<?php }
add_action( 'woocommerce_checkout_after_customer_details' ,'kia_extra_checkout_fields' );

// save the extra field when checkout is processed
function kia_save_extra_checkout_fields( $order_id, $posted ){
    if( isset( $posted['some_field'] ) ) {
        update_post_meta( $order_id, '_some_field', sanitize_text_field( $posted['some_field'] ) );
    }
}
add_action( 'woocommerce_checkout_update_order_meta', 'kia_save_extra_checkout_fields', 10, 2 );

// display the extra data in the order admin panel
function kia_display_order_data_in_admin( $order ){  ?>
    <div class="order_data_column">
        <h4><?php _e( 'Extra Details', 'woocommerce' ); ?></h4>
        <?php 
            echo '<p><strong>' . __( 'Some field' ) . ':</strong>' . get_post_meta( $order->id, '_some_field', true ) . '</p>'; ?>
    </div>
<?php }
add_action( 'woocommerce_admin_order_data_after_order_details', 'kia_display_order_data_in_admin' );
//添加新的签出字段
函数kia\u filter\u checkout\u字段($fields){
$fields['extra_fields']=数组(
“某些字段”=>数组(
'类型'=>'文本',
“必需”=>true,
'label'=>\('Some field')
)
);
返回$fields;
}
添加_过滤器('woocommerce_checkout_fields'、'kia_filter_checkout_fields');
//在签出窗体上显示额外字段
函数kia_extra_checkout_fields(){
$checkout=WC()->checkout();?>

我使用了HelgatheViking的代码,并对下拉选项进行了一些调整,所以我只是在这里发布代码的第一部分“//添加一个新的签出字段”,以防其他人想在他们的签出中添加交付时间选项:

// Add a new checkout field
function kia_filter_checkout_fields($fields){
    $fields['extra_fields'] = array(
            'some_field' => array(
                'required'      => true,
                'label' => __( 'Delivery Time' ),
                'type'        => 'select',
                'options'     => array(
                '7:00AM-7:30AM' => __('7:00 AM - 7:30 AM', 'woocommerce' ),
                '7:30AM-8:00AM' => __('7:30 AM - 8:00 AM', 'woocommerce' ),

                   ....

                '5:30PM-6:00PM' => __('5:30 PM - 6:00 PM', 'woocommerce' )

            )
                )
            );

    return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'kia_filter_checkout_fields' );
(请注意)确保您查看了她的网站,以获取将结果交付时间(或字段值)添加到您的客户和管理员新订单电子邮件中所需的代码

更新:要使用本线程中提到的所有编码示例将交货时间添加到订单详细信息页面(Thankyu.php模板),只需将以下代码添加到主题的functions.php文件中:

add_action( 'woocommerce_order_details_after_order_table',     'nolo_custom_field_display_cust_order_meta', 10, 1 );

function nolo_custom_field_display_cust_order_meta($order){
    echo '<p><strong>'.__('Delivery Time').':</strong> ' .     get_post_meta( $order->id, '_some_field', true ). '</p>';

}
add_action('woocommerce_order_details_在_order_table之后,'nolo_custom_field_显示_cust_order_meta',10,1);
函数nolo\自定义\字段\显示\客户\订单\元($order){
回显“”。“(“交货时间”):”。获取“post”meta($order->id),“某些字段”,true)。“

”; }
包括一个日期选择器。谢谢,但我正在尝试放弃插件路线。插件完全满足您的需要时没有问题。但是如果您将日期作为post meta添加到订单中(订单是post类型)然后你就可以从那里回忆起它了。我不确定如何使用get_post_meta来实现我的代码细节。有什么想法吗?非常感谢!这非常有效。我只是做了一些调整,使其显示为下拉选项。你知道我将如何使结果字段值显示在的thankyou.php页面上吗woocommerce?我知道它会出现在电子邮件和我的管理员端,但如果能将其包含在最终订单/谢谢页面上,那就太好了。请查看
签出/Thankyu.php
模板,并寻找合适的钩子使用。
执行操作('woocommerce\u Thankyu',$order->id)
将根据您想要显示信息的确切位置工作。然后请记住,钩子正在传递要使用的订单ID,并且您的数据是元数据,可以使用
get_post_meta()
进行检索。