使用 WC_Order_Query 时防止重复

Prevent duplications while using WC_Order_Query

此代码显示管理订单页面上所有订单的所有客户账单电子邮件,我需要从结果中删除所有重复项。

如果客户多次购买某物并使用同一电子邮件创建更多订单,则只显示一次:

add_action( 'load-edit.php', function(){
    $screen = get_current_screen(); 

    if ( 'edit-shop_order' === $screen->id ) {
        add_action( 'in_admin_footer', function() {
            $args = array(
             'limit' => 9999,
             'return' => 'ids',
             'status' => 'completed'
            );
            $query = new WC_Order_Query( $args );
            $orders = $query->get_orders();
            echo '<div class="" style="background-color: #aaa; padding: 10px; margin-bottom: 50px;"><h3>All customer emails</h3>';
            echo '<form><textarea rows="8" style="width: 100%;" onclick="this.select()">';
            foreach( $orders as $order_id ) {
                $order = wc_get_order( $order_id );

                echo $order->get_billing_email() . ', ';
            }
            echo '</textarea></form></div>';
        });
        
        add_action( 'admin_footer', function() {
            echo '<style>#wpfooter{position: relative !important; top: -50px;}</style>';
        } );
    }
});

您可以使用 in_array(),如果它不存在则显示它。然后将其添加到数组中,使其存在于下一个循环中。

所以你得到:

// Initialize
$billing_emails = array();

// Loop
foreach( $orders as $order_id ) {
    // Getters
    $order = wc_get_order( $order_id );
    $billing_email = $order->get_billing_email();

    // Checks if a value exists in an array
    if ( ! in_array( $billing_email, $billing_emails ) ) {
        // Output
        echo $billing_email;

        // Push to array
        $billing_emails[] = $billing_email;
    }
}

注意:不需要使用'return' => 'ids'。默认情况下返回订单对象,因此不需要使用 wc_get_order( $order_id )