gpt4 book ai didi

php - 如何在 fputcsv 中使用 foreach?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:58 24 4
gpt4 key购买 nike

我正在尝试将具有特定订单状态的 woocommerce 订单详细信息导出到文本文件中。我的问题是它只会获取一个订单的详细信息,因为我没有使用 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);

最佳答案

您似乎提前关闭了 foreach() - 打开循环上方的文件,将 header 放在顶部,并将 fputcsv() 放入其中然后在循环外关闭文件。您还需要使用“a” - 附加 - 模式而不是“w”,否则它每次都会覆盖所有内容。

将您的 WordPress 和查询部分保持在顶部并尝试按此顺序编写代码,以便循环在每次获取新项目时都经过 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)

Ross Smith II 在这里的回答可能会有用 fputcsv doesn't write any data in a CSV file

并且您可能需要在该行的末尾添加一个“\n”(仅限双引号)以确保它们不会全部出现在滚动数英里的同一行上。可能方便引用 http://php.net/manual/en/function.fputcsv.php

关于foreach()的章节: How does PHP 'foreach' actually work?

关于php - 如何在 fputcsv 中使用 foreach?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34463686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com