Home > database >  woocommerce, how to create a condition for purchase date?
woocommerce, how to create a condition for purchase date?

Time:12-08

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(); ?>
}

CodePudding user response:

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,
 ),
),

CodePudding user response:

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(); ?>
}

?>
  • Related