Stornieren einer Bestellung in WooCommerce nach einem bestimmten Zeitraum

Lesezeit: 3 Minuten

Benutzer-Avatar
Muhammad Waqas

Ich habe einen Online-Shop in WooCommerce und es gibt eine Option, die lautet: Wenn x Zeitdauer erreicht ist, ändern Sie den Status dieser Bestellung in storniert und legen Sie auch den Bestand fest, in dem er sich vor dem Absenden der Bestellung befand.

Ich möchte es ändern, wenn x Zeitdauer erreicht ist, dann wird der Bestellstatus auf “Abgeschlossen” geändert und auch der Artikel wurde aus dem Lagerbestand reduziert.

Soweit ich weiß, ist das der Code für Lagerbestand reduzieren und Bestellung stornieren.

/**
 * woocommerce_cancel_unpaid_orders function.
 *
 * @access public
 * @return void
 */
function woocommerce_cancel_unpaid_orders() {
    global $wpdb;

    $held_duration = get_option( 'woocommerce_hold_stock_minutes' );

    if ( $held_duration < 1 || get_option( 'woocommerce_manage_stock' ) != 'yes' )
        return;

    $date = date( "Y-m-d H:i:s", strtotime( '-' . absint( $held_duration ) . ' MINUTES', current_time( 'timestamp' ) ) );

    $unpaid_orders = $wpdb->get_col( $wpdb->prepare( "
        SELECT posts.ID
        FROM {$wpdb->posts} AS posts
        LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID
        LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )
        LEFT JOIN {$wpdb->terms} AS term USING( term_id )

        WHERE   posts.post_type="shop_order"
        AND     posts.post_status="publish"
        AND     tax.taxonomy      = 'shop_order_status'
        AND     term.slug         IN ('pending')
        AND     posts.post_modified < %s
    ", $date ) );

    if ( $unpaid_orders ) {
        foreach ( $unpaid_orders as $unpaid_order ) {
            $order = new WC_Order( $unpaid_order );

            if ( apply_filters( 'woocommerce_cancel_unpaid_order', true, $order ) )
                $order->update_status( 'cancelled', __( 'Unpaid order cancelled - time limit reached.', 'woocommerce' ) );
        }
    }

    wp_clear_scheduled_hook( 'woocommerce_cancel_unpaid_orders' );
    wp_schedule_single_event( time() + ( absint( $held_duration ) * 60 ), 'woocommerce_cancel_unpaid_orders' );
}

add_action( 'woocommerce_cancel_unpaid_orders', 'woocommerce_cancel_unpaid_orders' );

Ich persönlich habe diese Änderungen vorgenommen, sind sie sinnvoll?

/**
 * woocommerce_cancel_unpaid_orders function.
 *
 * @access public
 * @return void
 */
function woocommerce_cancel_unpaid_orders() {
    global $wpdb;

    $held_duration = get_option( 'woocommerce_hold_stock_minutes' );

    if ( $held_duration < 1 || get_option( 'woocommerce_manage_stock' ) != 'yes' )
        return;

    $date = date( "Y-m-d H:i:s", strtotime( '-' . absint( $held_duration ) . ' MINUTES', current_time( 'timestamp' ) ) );

    $unpaid_orders = $wpdb->get_col( $wpdb->prepare( "
        SELECT posts.ID
        FROM {$wpdb->posts} AS posts
        LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID
        LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )
        LEFT JOIN {$wpdb->terms} AS term USING( term_id )

        WHERE   posts.post_type="shop_order"
        AND     posts.post_status="publish"
        AND     tax.taxonomy      = 'shop_order_status'
        AND     term.slug         IN ('pending')
        AND     posts.post_modified < %s
    ", $date ) );

    if ( $unpaid_orders ) {
        foreach ( $unpaid_orders as $unpaid_order ) {
            $order = new WC_Order( $unpaid_order );

            if ( apply_filters( 'woocommerce_payment_complete_order_status', true, $order ) )
                $order->update_status( 'completed', __( 'order completed - time limit reached.', 'woocommerce' ) );
        }
    }

    wp_clear_scheduled_hook( 'woocommerce_payment_complete_order_status' );
    wp_schedule_single_event( time() + ( absint( $held_duration ) * 60 ), 'woocommerce_payment_complete_order_status' );
}

add_action( 'woocommerce_payment_complete_order_status', 'woocommerce_payment_complete_order_status' );

Ich habe diesen Filter ‘woocommerce_cancel_unpaid_order’ durch diesen woocommerce_payment_complete_order_status ersetzt

und diese geändert $order->update_status( ‘cancelled’, __( ‘Unbezahlte Bestellung storniert – Zeitlimit erreicht.’, ‘woocommerce’ ) );

mit diesem

$order->update_status( ‘abgeschlossen’, __( ‘Bestellung abgeschlossen – Zeitlimit erreicht.’, ‘woocommerce’ ) );

noch nicht getestet bcz Ich möchte eine Bestätigung, bevor ich es teste.

  • Können Sie Ihre Änderungen hervorheben? Und erklären Sie die Ergebnisse, die Sie erwarten, und das Ergebnis, das Sie erhalten?

    – Brasilo

    14. November 2013 um 21:47 Uhr

  • Bitte überprüfen Sie, dass ich aktualisiert habe

    – Muhammad Waqas

    15. November 2013 um 7:51 Uhr

  • Hast du darauf eine Antwort gefunden?

    – madebydavid

    17. Januar 2014 um 21:44 Uhr

1181310cookie-checkStornieren einer Bestellung in WooCommerce nach einem bestimmten Zeitraum

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy