WooCommerce 3+ 管理后端中的挂单问题摘要

Summary of pending orders issue in admin backend on WooCommerce 3+

将 Woocommerce 从 2.6.13 更新到 3.2.6 后,一些显示待定订单和计算订购产品的自定义代码不再有效。我在移植代码时遇到问题,因为我一直在查找的 woocommerce 文档似乎已过时。

例如,我认为这不再有效但我找不到更新的版本

$orders = get_posts( array(
    'post_type'   => 'shop_order',
    'post_status' => array( 'wc-processing', 'wc-completed' )
) );

我已经从下面的更新了它,但都没有返回数组中的任何东西

    $orders = get_posts( array(
    'post_type'   => 'shop_order',
    'post_status' => 'publish',
    'tax_query'   => array( array(
            'taxonomy' => 'shop_order_status',
            'field'           => 'slug',
            'terms'         => array( 'processing', 'completed' )
    ) )
) );

在 3.0+ 中使用 get_posts 从 woocommerce 获取订单的正确方法是什么?

您的第一个片段代码在 WC 3+ 中有效以获取 WP_Post 订单对象数组,但您需要以这种方式指定帖子数:

$post_orders = get_posts( array(
    'post_type'   => 'shop_order',
    'numberposts' => -1, // number of post (all)
    'post_status' => array( 'wc-processing', 'wc-completed' )
) );

// Display the number of Post orders objects in the array
echo count($post_orders);

或者您可以使用此 SQL 查询:

global $wpdb;

$post_orders = $wpdb->get_results( "
    SELECT *
    FROM {$wpdb->prefix}posts
    WHERE post_type LIKE 'shop_order'
    AND post_status IN ('wc-processing', 'wc-completed')
" );

// Display the number of WP_Post orders in the array
echo count($post_orders);

要获取 WC_Order 个对象的数组,您可以使用:

$orders = wc_get_orders( array(
    'numberposts' => -1, // number of post (all)
    'post_status' => array( 'wc-processing', 'wc-completed' )
) );
// Display the number of WP_Order orders in the array
echo count($orders);