首页 > 解决方案 > 如何使用 php 数组获取所有 woocommerce 订单计费或发货电子邮件

问题描述

add_filter( 'manage_edit-shop_order_columns', 'custom_shop_order_column',11);
function custom_shop_order_column($columns)
{
$reordered_columns = array();

    // Woocommerce version 3.3+ compatibility
    $location_after = version_compare( WC_VERSION, '3.3', '<' ) ? 'order_notes' : 'order_status';

    // Inserting the new column in a specific location
    foreach( $columns as $key => $column){
        $reordered_columns[$key] = $column;
        if( $key == $location_after ){
            $reordered_columns['pvdl']= __('PVF/DL', 'woocommerce');
        }
    }
    return $reordered_columns;
}

add_action( 'manage_shop_order_posts_custom_column' , 'custom_orders_list_column_content', 10, 2 );
function custom_orders_list_column_content( $column, $post_id )
{
if('pvdl' == $column){
        //echo 'Working on it';
        $order = wc_get_order($post_id);
        $email = $order->get_billing_email();
        //var_dump($email);
        mailchecker($email);

    }

}
function mailchecker($test_mail){
    
    $life = array();
    array_push($life, $test_mail);
    var_dump($life);
}

我试图将电子邮件推送到一个空数组,但它只显示当前订单电子邮件。我知道我在这里做一些愚蠢的事情,但我被困住了。有好心人想帮我解决这个问题吗?

标签: phpwordpresswoocommerce

解决方案


你应该试试这个:

add_action( 'admin_init' , 'custom_orders_list_column_content', 20, 3 ); // change accordingly
function custom_orders_list_column_content()
{
    $billing_email = $skip_duplicate = array();

    $customer_orders = get_posts( array(
        'post_type'   => 'shop_order',
        'post_status' =>'wc-completed', // change accordingly
        'posts_per_page' => '-1'
    ) );
    
    foreach( $customer_orders as $order){

        $order_id = $order->ID;

        if($order_id){

            $order = wc_get_order( $order_id );
            $bemail  = $order->get_billing_email();
            
            if(!in_array($bemail, $skip_duplicate)){
                $billing_email[] = $bemail;
                array_push($skip_duplicate,$bemail);
            }
            
        }
    }
    echo "<pre>";print_r($billing_email); exit;
}

您可以相应地更改“post_status”和“add_action”事件。


推荐阅读