Ich habe mich auf dieser Website und im Internet umgesehen, kann aber anscheinend keine Lösung finden. Mein Kunde möchte, dass jede Bestellung mit storniertem Bestellstatus nach einiger Zeit vollständig aus WooCommerce entfernt wird.
<?php
function update_order_status( $order_id ) {
$order = new WC_Order( $order_id );
$order_status = $order->get_status();
if ('cancelled' == $order_status || 'failed' == $order_status || 'pending' == $order_status ) {
wp_delete_post($order_id,true);
}
}
Ich habe derzeit den obigen Codeausschnitt, möchte jedoch, dass diese Aktion um 5 Minuten verzögert wird, da ausstehende Bestellungen möglicherweise noch in Zahlung gehen.
Daher sollten TL; DR-Bestellungen mit dem Status "Storniert", "Fehlgeschlagen" und "Ausstehend" nach 5 Minuten vollständig gelöscht werden.
Wer könnte mir bei diesem helfen?
Viele Grüße, Dylan
führen Sie den folgenden Code in der Datei function.php Ihres untergeordneten Themas aus, wie unten angegeben.
function wc_remove_cancelled_status( $statuses ){
if( isset( $statuses['wc-cancelled'] ) ){
unset( $statuses['wc-cancelled'] );
}
return $statuses;
}
add_filter( 'wc_order_statuses', 'wc_remove_cancelled_status' );
Ich denke, der Benutzer kann den Auftragsstatus innerhalb von fünf Minuten ändern. Also habe ich den folgenden Code mit hook-
add_action( 'woocommerce_order_status_failed', 'the_dramatist_woocommerce_auto_delete_order' );
add_action( 'woocommerce_order_status_pending', 'the_dramatist_woocommerce_auto_delete_order' );
add_action( 'woocommerce_order_status_cancelled', 'the_dramatist_woocommerce_auto_delete_order' );
function the_dramatist_woocommerce_auto_delete_order( $order_id ) {
// 5*60 = 300 seconds. Here 1minute = 60 seconds.
wp_schedule_single_event(tim() + 300, 'the_dramatist_main_delete_event', $order_id);
}
function the_dramatist_main_delete_event( $order_id ) {
global $woocommerce;
$order = new WC_Order( $order_id );
$order_status = $order->get_status();
if ( !$order_id )
return false;
if ('cancelled' == $order_status || 'failed' == $order_status || 'pending' == $order_status ) {
wp_delete_post($order_id,true);
return true;
}
return false;
}
Hier stellen wir fest, dass sich der Auftragsstatus nach dem Aufwachen aus dem Ruhezustand geändert hat, und überprüfen den Auftragsstatus erneut. Wenn der Benutzer den Auftragsstatus innerhalb von fünf Minuten ändert, wird der Löschvorgang nicht ausgeführt. Bitte testen Sie es. Ich habe es nicht getestet. Hoffe das hilft dir.
P.S. Ich denke, dass die Funktion
sleep()
den Lebenszyklus von WordPress etwas verzögern wird. Also verwenden wir besser diewp_schedule_single_event
Funktion. Also habe ich meinen Code aktualisiert.
Hmm ... Wenn wir Ihr Skript verwenden, denke ich, wenn Sie die Zeit sparen, wie:
<?php
function update_order_status( $order_id ) {
$order = new WC_Order( $order_id );
$order_status = $order->get_status();
if ('cancelled' == $order_status || 'failed' == $order_status || 'pending' == $order_status ) {
$current_time = date('h:i:s'); /* this is not necessary - not being used. */
sleep(300); // 300 seconds in 5 minutes
wp_delete_post($order_id,true);
}
}
Ich weiß nicht, ob das funktionieren wird, aber es ist einen Versuch wert.