简体   繁体   中英

woocommerce, how to create a condition for purchase date?

I have elaborated the attached code, in order to recall all the products purchased by a user. At this point, however, I would like to insert a condition such as: show only the products purchased in the last 3 days. However, I have never ventured into ifs by date. Anyone have any idea how to create such a condition?

<?php

          $order_status = array_keys( wc_get_order_statuses());
                  $customer_orders = get_posts( apply_filters( 'woocommerce_my_account_my_orders_query', array(
                    'numberposts' => - 1,
                    'meta_key'    => '_customer_user',
                    'meta_value'  => get_current_user_id(),
                    'post_type'   => wc_get_order_types( 'view-orders' ),
                    'post_status' => $order_status,
                ) ) );

                foreach ( $customer_orders as $customer_order ) {
                    $order = new WC_Order( $customer_order );
          foreach ( $order->get_items() as $item_id => $item ) :
          endforeach;
                    $date = esc_html( wc_format_datetime( $order->get_date_created() ) );
?>

          <?php $date_comp = $order->get_date_completed(); ?>
          <?php $product = wc_get_product( $item->get_product_id() ); ?>
          <?php $product_id = $item->get_product_id(); ?>
}

I used to select orders using these conditions

'date_query' => array(
   'after' => date('Y-m-d', strtotime('-3 days'))
)

'date_query' => array(
 array(
  'after' => $date_start,
  'before' => $date_end,
  'inclusive' => true,
 ),
),

You can use wc_get_orders where you can pass date_created param. for more information check here - WC_Order_Query . try the below code.

// Get last 3 days orders.
$args = array(
    'numberposts'  => -1,  
    'orderby'      => 'date',
    'order'        => 'DESC',  
    'customer_id'  => get_current_user_id(),
    'date_created' => '>' . date( 'Y-m-d', strtotime('- 3day' ) ),
    'customer_id'  => get_current_user_id(),
);
$customer_orders = wc_get_orders( $args );

//* Loop through each WC_Order object
foreach( $customer_orders as $customer_order ){

    $order = new WC_Order( $customer_order );

    foreach ( $order->get_items() as $item_id => $item ) :

    endforeach;
    
    $date       = esc_html( wc_format_datetime( $order->get_date_created() ) );
    $date_comp  = $order->get_date_completed();
    $product    = wc_get_product( $item->get_product_id() );
    $product_id = $item->get_product_id();

}

OR you can use date_query in get_posts .

<?php

$order_status     = array_keys( wc_get_order_statuses());
$customer_orders  = get_posts( apply_filters( 'woocommerce_my_account_my_orders_query', array(
    'numberposts' => - 1,
    'meta_key'    => '_customer_user',
    'meta_value'  => get_current_user_id(),
    'post_type'   => wc_get_order_types( 'view-orders' ),
    'post_status' => $order_status,
    'date_query'  => array(
        'after'   => date( 'Y-m-d', strtotime('-3 days') )
    )
) ) );

foreach ( $customer_orders as $customer_order ) {
    $order = new WC_Order( $customer_order );
    foreach ( $order->get_items() as $item_id => $item ) :
    endforeach;
    $date = esc_html( wc_format_datetime( $order->get_date_created() ) ); ?>
    <?php $date_comp = $order->get_date_completed(); ?>
    <?php $product = wc_get_product( $item->get_product_id() ); ?>
    <?php $product_id = $item->get_product_id(); ?>
}

?>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM