Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据WooCommerce中的自定义字段值向订单摘要添加文本_Php_Wordpress_Woocommerce_Checkout_Orders - Fatal编程技术网

Php 根据WooCommerce中的自定义字段值向订单摘要添加文本

Php 根据WooCommerce中的自定义字段值向订单摘要添加文本,php,wordpress,woocommerce,checkout,orders,Php,Wordpress,Woocommerce,Checkout,Orders,我已经成功地在我的WooCommerce结帐页面中添加了一个自定义字段,该字段是客户可以选择从中收集商品的不同商店的选择器。目前,它在checkout页面上显示了这个字段,我正在使用jQuery在选择器下面添加信息,并相应地更新运输成本 接下来我需要做的是在客户的订单电子邮件中添加关于每个收货地点的字段+附加信息。例如,如果客户选择位置1,订单电子邮件应显示: 交货地点=地点1 地址=123街 信息=工作日下午4点到晚上7点之间的取货订单 我只是不知道如何将“信息”和“地址”字段添加到数组中,然

我已经成功地在我的WooCommerce结帐页面中添加了一个自定义字段,该字段是客户可以选择从中收集商品的不同商店的选择器。目前,它在checkout页面上显示了这个字段,我正在使用jQuery在选择器下面添加信息,并相应地更新运输成本

接下来我需要做的是在客户的订单电子邮件中添加关于每个收货地点的字段+附加信息。例如,如果客户选择位置1,订单电子邮件应显示:

交货地点=地点1
地址=123街
信息=工作日下午4点到晚上7点之间的取货订单

我只是不知道如何将“信息”和“地址”字段添加到数组中,然后在电子邮件中调用它们

这是我目前的代码:

add_filter( 'woocommerce_checkout_fields' , 'custom_store_pickup_field');

function custom_store_pickup_field( $fields ) {

  $fields['billing']['store_pickup'] = array(
    'type'     => 'select',
    'options'  => array(
    'option_0'=> 'Please Select a Delivery Option',
    'option_1' => 'Delivery',
    'option_2' => 'Gym1',
    'option_3' => 'Gym2'
    ),
 'label'     => __('Store Pick Up Location (Optional)', 'woocommerce'),
'required'  => true,
'class'     => array('store-pickup form-row-wide'),
'id'        => 'store_pickup_val',
'clear'     => true
 );

 return $fields;
}

//* Process the checkout
 add_action('woocommerce_checkout_process', 
'wps_select_checkout_field_process');
 function wps_select_checkout_field_process() {
global $woocommerce;
// Check if set, if its not set add an error.
if ($_POST['store_pickup'] == "option_0")
 wc_add_notice( '<strong>Please select a Delivery option</strong>', 'error' 
 );
 }


add_action( 'woocommerce_after_checkout_form', 'gym_opening_hours', 6);

function gym_opening_hours() {

 ?>
<script type="text/javascript">
    jQuery('#store_pickup_val').change(function(){

        jQuery('body').trigger('update_checkout');


        jQuery( ".gym-collection" ).remove(); 

        if (this.value == 'option_1') {
            jQuery('#shipping_method_0_flat_rate1').prop('checked', true);
        }

        if (this.value == 'option_2') {
             jQuery( "<p>Order can be collected between 4pm - 7pm on Tuesdays</p>" ).addClass("gym-collection").insertAfter( "#store_pickup_val" );
             jQuery('#shipping_method_0_local_pickup3').prop('checked', true);  
        } 
            if (this.value == 'option_3') {
             jQuery( "<p>Order can be collected between 4pm - 7pm on Tuesdays</p>" ).addClass("gym-collection").insertAfter( "#store_pickup_val" );
             jQuery('#shipping_method_0_local_pickup3').prop('checked', true);          
        } 
        else {

        }

    });
</script>
<?php

}
add_filter('woocommerce_checkout_fields'、'custom_store_pick_field');
功能自定义存储拾取字段($fields){
$fields['billing']['store\u pickup']=array(
'类型'=>'选择',
“选项”=>数组(
'选项0'=>'请选择一个交付选项',
'选项_1'=>'交付',
'option_2'=>'Gym1',
'选项3'=>'Gym2'
),
“标签”=>“‘商店提货地点(可选)’,‘woocommerce’”,
“必需”=>true,
'class'=>数组('store-pickup form row-wide'),
'id'=>'store\u pickup\u val',
“清除”=>true
);
返回$fields;
}
//*处理结帐
添加操作('woocommerce\u checkout\u process',
“wps_选择_签出_字段_流程”);
函数wps_选择_签出_字段_进程(){
全球商业;
//检查是否已设置,如果未设置,则添加错误。
如果($_POST['store\u pickup']==“option\u 0”)
wc_添加_通知(“请选择交付选项”,“错误”
);
}
增加活动(“结帐表后的商业活动”、“健身房开放时间”,6);
功能健身房开放时间(){
?>
jQuery('#store_pickup_val').change(function(){
jQuery('body')。触发器('update_checkout');
jQuery(“.gym集合”).remove();
如果(this.value=='option_1'){
jQuery('#shipping_method_0_flat_rate1')。prop('checked',true);
}
如果(this.value=='option_2'){
jQuery(订单可以在周二下午4点到7点之间收集。addClass(“健身房收集”)。insertAfter(“#store#pickup#val”);
jQuery(“#shipping_method_0_local_pickup3”).prop('checked',true);
} 
如果(this.value=='option_3'){
jQuery(订单可以在周二下午4点到7点之间收集。addClass(“健身房收集”)。insertAfter(“#store#pickup#val”);
jQuery(“#shipping_method_0_local_pickup3”).prop('checked',true);
} 
否则{
}
});
这就是您需要的:

  • 格式化“收货数据”并将其保存为订单元数据(针对客户-前端)
  • 保存管理员订单编辑页面的“收货位置”(用于后端)
  • 在管理订单编辑页面(后端)中显示“收货位置”
  • 在订单视图和接收页面(前端)中显示“拾取html格式数据”
  • 在电子邮件通知中显示“拾取html格式的数据”(带有嵌入样式)
我还轻松地重温了您的代码:

add_filter( 'woocommerce_checkout_fields' , 'custom_store_pickup_field');
function custom_store_pickup_field( $fields ) {
    $fields['billing']['store_pickup'] = array(
        'type'     => 'select',
        'id'       => 'store_pickup_val',
        'label'    => __('Store Pick Up Location (Optional)', 'woocommerce'),
        'required' => true,
        'class'    => array('store-pickup form-row-wide'),
        'options'  => array(
            ''=> 'Please Select a Delivery Option',
            'option_1' => 'Delivery',
            'option_2' => 'Gym1',
            'option_3' => 'Gym2'
        ),
        'clear'     => true,
    );
    return $fields;
}

//* Process the checkout
add_action('woocommerce_checkout_process',  'wps_select_checkout_field_process');
function wps_select_checkout_field_process() {
    // Check if set, if its not set add an error.
    if ( $_POST['store_pickup'] == "option_0" )
        wc_add_notice( '<strong>Please select a Delivery option</strong>', 'error' );
}


add_action( 'woocommerce_after_checkout_form', 'gym_opening_hours', 6 );
function gym_opening_hours() {
     ?>
    <script type="text/javascript">
        (function($){
            $('#store_pickup_val').change( function(){
                $( ".gym-collection" ).remove();
                if (this.value == 'option_1') {
                    $('#shipping_method_0_flat_rate1').prop('checked', true);
                } else if (this.value == 'option_2') {
                     $( "<p>Order can be collected between 4pm - 7pm on Tuesdays</p>" ).addClass("gym-collection").insertAfter( "#store_pickup_val" );
                     $('#shipping_method_0_local_pickup3').prop('checked', true);
                } else if (this.value == 'option_3') {
                    $( "<p>Order can be collected between 4pm - 7pm on Tuesdays</p>" ).addClass("gym-collection").insertAfter( "#store_pickup_val" );
                    $('#shipping_method_0_local_pickup3').prop('checked', true);
                }
                $('body').trigger('update_checkout');
            });
        })(jQuery);
    </script>
<?php
}
add_filter('woocommerce_checkout_fields'、'custom_store_pick_field');
功能自定义存储拾取字段($fields){
$fields['billing']['store\u pickup']=array(
'类型'=>'选择',
'id'=>'store\u pickup\u val',
“标签”=>“‘商店提货地点(可选)’,‘woocommerce’”,
“必需”=>true,
'class'=>数组('store-pickup form row-wide'),
“选项”=>数组(
''=>'请选择一个传递选项',
'选项_1'=>'交付',
'option_2'=>'Gym1',
'选项3'=>'Gym2'
),
“清除”=>正确,
);
返回$fields;
}
//*处理结帐
添加操作('woocommerce\u checkout\u process'、'wps\u select\u checkout\u field\u process');
函数wps_选择_签出_字段_进程(){
//检查是否已设置,如果未设置,则添加错误。
如果($_POST['store\u pickup']==“option\u 0”)
wc_添加_通知(“请选择一个交付选项,”,“错误”);
}
增加活动(“结帐表后的商业活动”、“健身房开放时间”,6);
功能健身房开放时间(){
?>
(函数($){
$('#存储_皮卡_val')。更改(函数(){
$(“.gym收藏”).remove();
如果(this.value=='option_1'){
$(“#装运方法(0)固定费率1”).prop('checked',true);
}else if(this.value=='option_2'){
$(“订单可以在周二下午4点到7点之间领取。

”).addClass(“健身房收藏”).insertAfter(“商店收货”); $(“#装运方法(0)本地(3)”).prop('checked',true); }else if(this.value=='option_3'){ $(“订单可以在周二下午4点到7点之间领取。

”).addClass(“健身房收藏”).insertAfter(“商店收货”); $(“#装运方法(0)本地(3)”).prop('checked',true); } $('body')。触发器('update_checkout'); }); })(jQuery);
哦,伙计,这正是我想要的-在PHP中使用条件-我最终使用了第二个使用Jquery条件语句填充的字段,但我认为你的字段更干净。当我有时间时,我会重新做插件。谢谢!
// Save the delivery location data to the order meta
add_action( 'woocommerce_checkout_update_order_meta', 'store_pickup_field_update_order_meta', 10, 1 );
function store_pickup_field_update_order_meta( $order_id ) {

    // BELOW update the data
    if ( $_POST['store_pickup'] == 'option_2' )
        $data = array( 
            'location' => 'Location 1', 
            'address' => '123 Beverly street<br> 90001 Los Angeles' 
        );
    elseif ( $_POST['store_pickup'] == 'option_3' )
        $data = array( 
        'location' => 'Location 2', 
        'address' => '456 Trumpet street<br> 90056 Los Angeles' 
    );

    $collect_info = 'Order can be collected between 4pm - 7pm on Tuesdays';

    if ( $_POST['store_pickup'] == 'option_2' || $_POST['store_pickup'] == 'option_3' ){
        // HTML
        $store_pickup = "<h3>Pickup Information</h3>
        <table class='pickup td' cellspacing='0' cellpadding='6'>
            <tr>
                <th>Location:</th>
                <td>".$data['location']."</td>
            </tr>
            <tr>
                <th><strong>Adress:</strong></th>
                <td>".$data['address']."</td>
            </tr>
            <tr>
                <th><strong>Info:</strong></th>
                <td>".$collect_info."</td>
            </tr>
        </table>";

        // Save pickup html data (front end)
        update_post_meta( $order_id, '_store_pickup_data', $store_pickup );
        // Save pickup location (backend)
        update_post_meta( $order_id, '_store_pickup_location', $data['location'] );
    }
}

// Display 'pickup location' on the order edit page (backend)
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'display_store_pickup_location_on_order_edit_pages', 10, 1 );
function display_store_pickup_location_on_order_edit_pages( $order ){
    $pickup_location = get_post_meta( $order->get_id(), '_store_pickup_location', true );
    if( ! empty( $pickup_location ) )
        echo '<p><strong>Store pickup location: </strong> ' . $pickup_location . '</p>';
}

// Display 'pickup html data' in "Order received" and "Order view" pages (frontend)
add_action( 'woocommerce_order_details_after_order_table', 'display_store_pickup_data_in_orders', 10 );
function display_store_pickup_data_in_orders( $order ) {
    $pickup_data = get_post_meta( $order->get_id(), '_store_pickup_data', true );
    if( ! empty( $pickup_data ) )
        echo $pickup_data;
}

// Display 'pickup html data' in Email notifications (frontend)
add_action( 'woocommerce_email_order_meta', 'display_store_pickup_data_in_emails', 10 );
function display_store_pickup_data_in_emails( $order ) {
    $pickup_data = get_post_meta( $order->get_id(), '_store_pickup_data', true );
    if( ! empty( $pickup_data ) ){
        // Email CSS style rules
        echo '<style>
        table.pickup{width: 100%; font-family: \'Helvetica Neue\', Helvetica, Roboto, Arial, sans-serif;
            color: #737373; border: 1px solid #e4e4e4;}
        table.pickup th, table.pickup td{text-align: left; border-top-width: 4px;
            color: #737373; border: 1px solid #e4e4e4; padding: 12px;}
        table.pickup td{text-align: left; border-top-width: 4px; color: #737373; border: 1px solid #e4e4e4; padding: 12px;}
        </style>';
        // Html data
        echo $pickup_data;
    }

}