I am trying to export woocommerce order details with a specific order status into a textfile. My problem is that it will only get details for one order because I am not using foreach. Does anyone know how I can change my code so it will get all orders in separate rows?
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);
You seem to have closed the
foreach()
early – open the file above the loop, put the headers at the top, and have thefputcsv()
inside it then close the file outside the loop. You also need to use the “a” – append – mode not “w” or it will overwrite everything each time.Keep your WordPress and Query part at the top and try this order for the code, so that the loop passes over the
fputcsv()
each time it gets a new item:If you need to put the headers inside the file this has suitable code https://www.jonasjohn.de/snippets/php/post-request.htm
Ross Smith II’s answer here might be useful fputcsv doesn’t write any data in a CSV file
and you might need to add a “n” at the end of the line (double quotes only) to make sure they don’t all appear on the same line which scrolls across for miles. Might be handy reference http://php.net/manual/en/function.fputcsv.php
Chapter and verse on
foreach()
:How does PHP ‘foreach’ actually work?