2015-12-25 18 views
5

Sto tentando di esportare i dettagli degli ordini di woocommerce con uno stato di ordine specifico in un file di testo. Il mio problema è che otterrà solo i dettagli per un ordine perché non sto usando foreach. Qualcuno sa come posso cambiare il mio codice in modo da ottenere tutti gli ordini in righe separate?Come si usa foreach in 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); 

risposta

1

ti sembra di avere chiuso il foreach() presto - aprire il file sopra il ciclo, mettere le intestazioni in alto, e hanno il fputcsv() al suo interno chiudere il file al di fuori del ciclo. Devi anche usare "a" - append - mode not "w" altrimenti sovrascriverà ogni cosa ogni volta.

Mantenere il vostro WordPress e una parte di query in alto e provare questo ordine per il codice, in modo che il ciclo passa sopra il fputcsv() ogni volta che si riceve un nuovo elemento:

Se avete bisogno di mettere le intestazioni all'interno della file di questo ha il codice adatto 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) 
risposta di

Ross Smith II qui potrebbe essere utile fputcsv doesn't write any data in a CSV file

e potrebbe essere necessario aggiungere un "\ n" alla fine della linea (virgolette solo) per farecerto che non appaiono tutti sulla stessa linea che scorre per miglia. Potrebbe essere utile riferimento http://php.net/manual/en/function.fputcsv.php

capitolo e versetto sulla foreach(): How does PHP 'foreach' actually work?