使用 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 )
。
此代码显示管理订单页面上所有订单的所有客户账单电子邮件,我需要从结果中删除所有重复项。
如果客户多次购买某物并使用同一电子邮件创建更多订单,则只显示一次:
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 )
。