2015-12-25 19 views
5

Woocommerce sipariş ayrıntılarını belirli bir sipariş durumuyla birlikte bir metin dosyasına aktarmaya çalışıyorum. Benim sorunum, sadece bir siparişin ayrıntılarını alacağıdır çünkü foreach kullanmıyorum. Kodumu nasıl değiştirebileceğimi bilen var mı? Böylece tüm siparişler ayrı satırlarda mı olacak? Döngü yukarıdaki dosyayı açmak üstündeki başlıkları koymak ve daha sonra döngünün dışında dosyayı kapatın içeride fputcsv() var -Fputcsv'de foreach nasıl kullanılır?

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); 

cevap

1

erken foreach() kapatmış görünüyor. Ayrıca "a" - "append" modunu "w" kullanmanız veya her seferinde her şeyin üzerine yazmanız gerekir.

sayfanın üst kısmındaki WordPress ve Sorgu kısmını tutun ve döngü fputcsv() üzerinde yeni bir madde olur her zaman geçer, böylece kod için bu emri deneyin:

içeride başlıklarını koymak gerekirse dosya bu uygun kodu vardır 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) 
burada

Ross Smith II yanıtın yararlı fputcsv doesn't write any data in a CSV file

olabilir ve siz (sadece çift tırnak) yapmak için satırın sonundaki bir "\ n" eklemeniz gerekebilirhepsinin, mil boyunca ilerleyen aynı çizgide görünmediğinden emin olun. How does PHP 'foreach' actually work?

: kullanışlı referans http://php.net/manual/en/function.fputcsv.php

Bölüm ve ayet foreach() üzerine Olabilir