2015-12-25 15 views
5

Próbuję wyeksportować szczegóły zamówienia woocommerce z określonym statusem zamówienia do pliku tekstowego. Moim problemem jest to, że dostanie on tylko szczegóły dla jednego zamówienia, ponieważ nie używam foreach. Czy ktoś wie, w jaki sposób mogę zmienić mój kod, aby otrzymywać wszystkie zamówienia w osobnych wierszach?Jak korzystać z foreach w fputcsv?

define('WP_USE_THEMES', false); 
require('/var/www/html/wp-blog-header.php'); 

global $wpdb; 
global $woocommerce; 
$args = array(
    'post_type'   => 'shop_order', 
    'post_status'  => 'publish', 
      'posts_per_page' => -1, 
    'tax_query' => array(
       array(
        'taxonomy' => 'shop_order_status', 
        'field' => 'slug', 
        'terms' => array('processing') 
       ) 
      ) 
); 

$my_query = new WP_Query($args); 
$orders = $my_query->posts; 
foreach($orders as $order) 
{ 
$order_id = $order->ID; 
    $billing_first_name =get_post_meta($order_id,'_billing_first_name',true); 
    $billing_last_name = get_post_meta($order_id,'_billing_last_name',true); 
    $billing_name = $billing_first_name. " ". $billing_last_name ; 
    $billing_address = get_post_meta($order_id,'_billing_address_1',true); 
    $billing_address2 = get_post_meta($order_id,'_billing_address_2',true); 
    $billing_city = get_post_meta($order_id,'_billing_city',true); 
    $billing_postcode = get_post_meta($order_id,'_billing_postcode',true); 
    $billing_country = get_post_meta($order_id,'_billing_country',true); 
    $billing_email = get_post_meta($order_id,'_billing_email',true); 
    $billing_phone = get_post_meta($order_id,'_billing_phone',true); 
} 

//headers 
header('Pragma: public'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Content-Description: File Transfer'); 
header('Content-Type: text/csv'); 
header('Content-Disposition: attachment; filename=export.txt;'); 

//open file pointer to standard output 
$fp = fopen('php://output', 'w'); 
if ($fp) 
{ 
fputcsv($fp, array("[quickid]", "[sender]", "[receiver]", "[orgno]", "[vatno]", "[category1text]", "[category2text]", "[category3text]", "[category1no]", "[category2no]", "[category3no]", "[name]", "[address1]", "[address2]", "[zipcode]", "[city]", "[state]", "[country]", "[contact]", "[email]", "[phone]", "[fax]", "[sms]", "[doorcode]", "[postaladdress1]", "[postaladdress2]", "[postalzipcode]", "[postalcity]", "[postalstate]", "[postalcountry]", "[deliv1]", "[deliv2]", "[deliv3]", "[deliv4]", "[receiverref]", "[senderref]", "[codref]", "[profilegroup]", "[account_1_type]", "[account_1_number]", "[account_1_bic]", "[account_2_type]", "[account_2_number]", "[account_2_bic]", "[account_3_type]", "[account_3_number]", "[account_3_bic]", "[account_4_type]", "[account_4_number]", "[account_4_bic]", "[account_5_type]", "[account_5_number]", "[account_5_bic]", "[partner_plab_custno]", "[partner_plab_receiverid]", "[partner_plab_destcode]", "[partner_hit_custno]", "[partner_hit_retailerid]", "[partner_hit_sortpos]", "[partner_pbrev_custno]", "[partner_pbrev_paymentmethod]"), "\t", " "); 
fputcsv($fp, array("1", "N", "Y", "", "", "", "", "", "", "", "", $billing_name, $billing_address, $billing_address2, $billing_postcode, $billing_city, "", $billing_country, $billing_name, $billing_email, $billing_phone, "", $billing_phone, "", $billing_address, $billing_address2, $billing_postcode, $billing_city, "", $billing_country, "", "", "", "", "Ordernummer", "Ordernummer", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""), "\t", " "); 
} 
fclose($fp); 

Odpowiedz

1

Wydaje się, że zamknął foreach() wcześnie - otwórz plik powyżej pętli umieścić nagłówki na górze, i mają fputcsv() w środku następnie zamknij plik na zewnątrz pętli. Musisz również użyć "a" - append - mode nie "w" lub za każdym razem będzie nadpisywać wszystko.

Miej WordPress i część zapytań na górze i spróbować tej kolejności kodu, tak że pętla przechodzi nad fputcsv() każdym razem, gdy dostaje nowy przedmiot:

Jeśli trzeba umieścić nagłówki Wewnątrz plik ten ma odpowiedni kod https://www.jonasjohn.de/snippets/php/post-request.htm

//open file pointer to standard output 
$fp = fopen('php://output', 'a'); 
if ($fp){ 
    if (filesize($fp) == 0){ 
    // headers 
    // add your header rows if it is a new file 
    // you may need to move these header(...); to the top of your page 
    // if you get "Headers already sent" errors as you have already included (required) 
    // a header - otherwise print them using fputs(); to the output file 
    // if that is where you want them. 
    // for example fputs($fp, "Pragma: public\r\n"); 
    //    fputs($fp, "Content-type: text/csv\r\n"); 

    header('Pragma: public'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Content-Description: File Transfer'); 
    header('Content-Type: text/csv'); 
    header('Content-Disposition: attachment; filename=export.txt;'); 
    // add your CSV header row if it is a new file 
    fputcsv($fp, array("[quickid]", "[sender]", "[receiver]", "[orgno]", "[vatno]", "[category1text]", "[category2text]", "[category3text]", "[category1no]", "[category2no]", "[category3no]", "[name]", "[address1]", "[address2]", "[zipcode]", "[city]", "[state]", "[country]", "[contact]", "[email]", "[phone]", "[fax]", "[sms]", "[doorcode]", "[postaladdress1]", "[postaladdress2]", "[postalzipcode]", "[postalcity]", "[postalstate]", "[postalcountry]", "[deliv1]", "[deliv2]", "[deliv3]", "[deliv4]", "[receiverref]", "[senderref]", "[codref]", "[profilegroup]", "[account_1_type]", "[account_1_number]", "[account_1_bic]", "[account_2_type]", "[account_2_number]", "[account_2_bic]", "[account_3_type]", "[account_3_number]", "[account_3_bic]", "[account_4_type]", "[account_4_number]", "[account_4_bic]", "[account_5_type]", "[account_5_number]", "[account_5_bic]", "[partner_plab_custno]", "[partner_plab_receiverid]", "[partner_plab_destcode]", "[partner_hit_custno]", "[partner_hit_retailerid]", "[partner_hit_sortpos]", "[partner_pbrev_custno]", "[partner_pbrev_paymentmethod]"), "\t", " ", "\n"); 
    } // end of adding headers if new file 

    $my_query = new WP_Query($args); 
    $orders = $my_query->posts; 
    foreach($orders as $order) 
    { 
    $order_id = $order->ID; 
     $billing_first_name =get_post_meta($order_id,'_billing_first_name',true); 
     $billing_last_name = get_post_meta($order_id,'_billing_last_name',true); 
     $billing_name = $billing_first_name. " ". $billing_last_name ; 
     $billing_address = get_post_meta($order_id,'_billing_address_1',true); 
     $billing_address2 = get_post_meta($order_id,'_billing_address_2',true); 
     $billing_city = get_post_meta($order_id,'_billing_city',true); 
     $billing_postcode = get_post_meta($order_id,'_billing_postcode',true); 
     $billing_country = get_post_meta($order_id,'_billing_country',true); 
     $billing_email = get_post_meta($order_id,'_billing_email',true); 
     $billing_phone = get_post_meta($order_id,'_billing_phone',true); 

     fputcsv($fp, array("1", "N", "Y", "", "", "", "", "", "", "", "", $billing_name, $billing_address, $billing_address2, $billing_postcode, $billing_city, "", $billing_country, $billing_name, $billing_email, $billing_phone, "", $billing_phone, "", $billing_address, $billing_address2, $billing_postcode, $billing_city, "", $billing_country, "", "", "", "", "Ordernummer", "Ordernummer", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""), "\t", " ", "\n"); 

    } // end of foreach 
fclose($fp); 
}else{ 
echo "Failed to open file $fp"; 
} // end of if ($fp) 
odpowiedź

Ross Smith II tutaj może być przydatna fputcsv doesn't write any data in a CSV file

i może trzeba dodać „\ n” na końcu linii (cudzysłów), aby dokonać na pewno nie wszystkie pojawiają się na tej samej linii, która przewija się przez mile. Może być przydatny odniesienia http://php.net/manual/en/function.fputcsv.php

rozdział i wers na foreach(): How does PHP 'foreach' actually work?