Maison >développement back-end >tutoriel php >Comment puis-je compléter automatiquement les commandes WooCommerce payantes avec une logique conditionnelle ?

Comment puis-je compléter automatiquement les commandes WooCommerce payantes avec une logique conditionnelle ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-27 10:57:081029parcourir

How Can I Automatically Complete Paid WooCommerce Orders with Conditional Logic?

Code conditionnel pour la complétion automatique des commandes payantes dans WooCommerce

WooCommerce complète généralement automatiquement les commandes de produits virtuels, mais cela peut ne pas se produire en raison du mode de paiement limites. Voici comment implémenter du code conditionnel pour gérer ce problème :

Identification du hook de filtre :

Le hook de filtre pour modifier les statuts de commande payés autorisés est woocommerce_payment_complete_order_status. Ce hook est utilisé par tous les modes de paiement qui nécessitent un paiement lors du paiement.

Solution pour WooCommerce 3 et supérieur (2019) :

add_filter( 'woocommerce_payment_complete_order_status', 'wc_auto_complete_paid_order', 10, 3 );
function wc_auto_complete_paid_order( $status, $order_id, $order ) {
    return 'completed';
}
  • Ce code modifie les statuts de commande payés autorisés pour inclure uniquement « terminé ».

Version améliorée pour WooCommerce 3 et supérieur (2018) :

add_action( 'woocommerce_thankyou', 'wc_auto_complete_paid_order', 20, 1 );
function wc_auto_complete_paid_order( $order_id ) {
    $order = wc_get_order( $order_id );

    if ( in_array( $order->get_payment_method(), array( 'bacs', 'cod', 'cheque' ) ) ) {
        return;
    }

    $order->update_status( 'completed' );
}
  • Ce code met uniquement à jour le statut à « terminé » pour les modes de paiement autres que « bacs », « cod » et « chèque ».

Réponse originale pour tous les WooCommerce Versions :

add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_paid_order', 10, 1 );
function custom_woocommerce_auto_complete_paid_order( $order_id ) {
    $order = wc_get_order( $order_id );

    if ( ( 'bacs' == get_post_meta($order_id, '_payment_method', true) ) || ( 'cod' == get_post_meta($order_id, '_payment_method', true) ) || ( 'cheque' == get_post_meta($order_id, '_payment_method', true) ) ) {
        return;
    } elseif( $order->get_status()  === 'processing' ) {
        $order->update_status( 'completed' );
    }
}
  • Ce code utilise get_post_meta() pour vérifier les méthodes de paiement « bacs », « morue » et « chèque » et ignore ces commandes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn