I would like to filter the WP_Query to retrive all woocommerce order (post_type = shop_order)
with particular status that are older than 15 minutes.
I.e. All posts that have been last modified on or before (now – 15 minutes ) // Hope I’m clear.
Below What I’ve tried
function filter_where($where = '') {
//posts in the last 15 minutes
$where .= " AND post_modified > '" . date('Y-m-d', strtotime('INTERVAL 15 MINUTE')) . "'";
return $where;
}
add_filter('posts_where', 'filter_where');
$args = array(
'post_type' => 'shop_order',
'post_status' => 'publish',
'posts_per_page' => 10,
'tax_query' => array(
array(
'taxonomy' => 'shop_order_status',
'field' => 'slug',
'terms' => array('completed')
)
)
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
$order_id = $loop->post->ID;
$order = new WC_Order($order_id);
print_r("<pre>");
print_r($order);
print_r("</pre>");
endwhile;
However that returns all record, Seems like have to modify the $where query, how can i achieve that ?
Do you need to filter the
posts_where
? Can’t you just use date query parameters? In your case, specificallybefore
.I can’t test this right now, so can’t verify if it would work. If you are modifying an archive then you should definitely adjust the query via
pre_get_posts
in lieu of creating new query.try this change date(‘Y-m-d’, strtotime(‘INTERVAL 15 MINUTE’)) to date(‘Y-m-d H:i:s’, strtotime(‘-15 minutes’))