2015-12-25 6 views
5

特定の注文ステータスを持つwoocommerce注文の詳細をテキストファイルにエクスポートしようとしています。私の問題は、foreachを使用していないため、1つの注文の詳細しか取得できないことです。それはすべての注文を別々の行に取得するように誰も私のコードを変更する方法を知っていますか?fputcsvでforeachを使用するには?

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

答えて

1

あなたは早期foreach()を閉じているように見える - 、ループ上のファイルを開く先頭にヘッダを置き、その中fputcsv()は、ループの外にファイルを閉じています。また、 "a" - append - modeを "w"ではなく使用する必要があります。そうしないと、毎回すべてを上書きします。

上部にあなたのワードプレスとクエリの一部を保ち、ループがfputcsv()の上に、それは新しい項目を取得するたびに通過するように、コードのためにこの順序を試してみてください。

あなたが内部ヘッダを配置する必要がある場合ファイルこれは、適切なコード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) 

ここロス・スミスIIの答えはfputcsv doesn't write any data in a CSV file

役に立つかもしれないとあなたが作るために行(のみ二重引用符)の末尾に「\ n」を追加する必要がありますがありますそれらがすべて同じ行に現れていないことを確認してください。 How does PHP 'foreach' actually work?

:便利なリファレンス http://php.net/manual/en/function.fputcsv.php

章と詩foreach()のかもしれません

関連する問題