我正在创建我的 WooCommerce 网站的一个部分,我的公司客户可以在其中登录并查看他们的哪些员工已下订单。
为了做到这一点,我计划使用WP_List_Table
由一些数据填充的a 。
但是,由于我们的帖子表和我们的订单库(大约 10000 个订单)的大小,我正在努力创建我的数据数组,它需要很长时间才能运行循环。
这是我创建电子邮件地址基本数组的代码 - 但 Wordpress 在 30 秒后抛出一个致命错误。
有没有人知道我如何以更好的方式做到这一点?非常感谢您的想法。
// Set the parameters for a orders
$customer_orders = get_posts( array(
'numberposts' => -1,
'post_type' => 'shop_order',
'post_status' => array_keys( wc_get_order_statuses() ),
) );
// Pull a list of order IDs
$orderids = [];
foreach ($customer_orders as $customer_order) {
$orderids[] = $customer_order->ID;
}
// Create a list of orders
$orders = [];
foreach ($orderids as $orderid) {
$order = wc_get_order($orderid);
$order_company = $order->get_billing_company();
if($order_company = 'Corporate Client Name') {
$orders[] = $order->get_billing_email();
}
}
print_r($orders);
您最好使用自定义 SQL 查询,直接按“企业客户名称”计费公司名称过滤。这将避免处理您的 5000 个订单。这是代码:
// Filtering by a company from the beginning
$order_company = 'Corporate Client Name';
global $wpdb;
$table_postmeta = $wpdb->prefix . "postmeta";
// 1. First SQL query the order IDs related to 'Corporate Client Name'
$results = $wpdb->get_col( "
SELECT post_id
FROM $table_postmeta
WHERE $table_postmeta.meta_key LIKE '_billing_company'
AND $table_postmeta.meta_value = '$order_company'
" );
// Convert the array of IDs in a coma separated string
$orders_str = implode(',', $results);
// 2. Second SQL query get the emails from order IDs related to 'Corporate Client Name'
$emails = $wpdb->get_col( "
SELECT meta_value
FROM $table_postmeta
WHERE $table_postmeta.meta_key LIKE '_billing_email'
AND $table_postmeta.post_id IN ($orders_str)
" );
// Testing output
print_r( $emails );
此代码经过测试并有效
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句