Hi @okoo,
I believe this is doable. We would need to add a PHP snippet to your site though. If that’s ok – there is the alg_wc_order_status_rules_do_apply_rule
filter in our plugin. It allows you to customize the conditions of when the rule should be applied. So you need to add a simple rule, e.g.: Rule #1 / Status from: Processing / Status to: Completed. Set the “Time trigger” option to 0 (we will override that with our snippet). And finally, add this snippet to your site:
add_filter( 'alg_wc_order_status_rules_do_apply_rule', function( $do_apply, $order, $rule_id, $args ) {
if ( 1 == $rule_id && $do_apply ) {
$date_to_check = '2022-06-01'; // TODO: get the date of the event from the ACF here
return ( time() >= strtotime( $date_to_check ) );
}
return $do_apply;
}, 10, 4 );
The only thing I’m not sure about is how to get the date of the event from the ACF. As you can see, in my snippet I’ve simply put 2022-06-01
. Could you please give me more info so I could come up with an exact code? E.g. is this date stored in product meta? If so, what’s the meta key?
Thread Starter
okoo
(@okoo)
Hi there! Thanks for your quick answer!
I’ve made a check, hope that my answer could help, otherwise feel free to ask me and I will try to provide more info 🙂
So, I’ve created a test product with a date for the event (02 July 20249. In DB I’ll get this value into “_postmeta” table with:
post_id: the ID of the product
meta_key: data-evento (this is the name of the ACF field i’ve created with field type “date picker”)
with this meta_value: 20240702
Hope to have provided you the right info! 🙂
Hi @okoo,
Ok, so I think this snippet should solve it:
add_filter( 'alg_wc_order_status_rules_do_apply_rule', function( $do_apply, $order, $rule_id, $args ) {
if ( 1 == $rule_id && $do_apply ) {
$date_to_check = false;
foreach ( $order->get_items() as $item ) {
$product_id = ( ! empty( $item['variation_id'] ) ? $item['variation_id'] : $item['product_id'] );
if ( ( $date_to_check = get_post_meta( $product_id, 'data-evento', true ) ) ) {
break;
}
}
return ( $date_to_check && time() >= strtotime( $date_to_check ) );
}
return $do_apply;
}, 10, 4 );
Please note that if your order has multiple products, the snippet will take the date of the first product with a non-empty data-evento
meta.
Please give it a try and let me know if that works.
Thread Starter
okoo
(@okoo)
Thank you so much for your help!
I’ve tested it right now and it seems to work perfectly!
I really appreciate your precious help!
Hi @okoo,
Happy to help 🙂 Let me know if you’ll need anything else.