在WooCommerce中创建订单的自定义表格 - 使用年限循环订单

问题描述:

我正在创建我的WooCommerce网站的一部分,我的公司客户可以登录并查看他们的哪些员工已下达订单。在WooCommerce中创建订单的自定义表格 - 使用年限循环订单

为了做到这一点,我打算使用将由一些数据填充的WP_List_Table

但是,由于我们的帖子表和我们的订单基地(c.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); 

该代码测试和工程

+0

你是一个绅士卢瓦克。我明天会去(这里迟到了),看看我怎么样。谢谢。 –

+0

@LinzDarlington我没有抓到...它工作吗? – LoicTheAztec

+0

Hiya Loic,对不起,反应慢。整个周末我都离开了电脑。上述工作出色 - 除了你写的'!='$ order_company''我认为你的意思是'='$ order_company''?非常感谢。这是我第一次进入SQL,因此是令人兴奋的! –