Maison >développement back-end >tutoriel php >Comment automatiser la réalisation des commandes de produits virtuels payants dans WooCommerce ?

Comment automatiser la réalisation des commandes de produits virtuels payants dans WooCommerce ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-09 18:25:11572parcourir

How to Automate the Completion of Paid Virtual Product Orders in WooCommerce?

Comment compléter automatiquement les commandes de produits virtuels payants dans WooCommerce

Lorsqu'une commande de produit virtuel est marquée comme payée, elle doit généralement être automatiquement définie sur statut « terminé ». Cependant, WooCommerce ne le fait pas toujours. Pour résoudre ce problème, vous pouvez implémenter un code personnalisé basé sur le mode de paiement WooCommerce utilisé.

Solution

L'extrait de code suivant filtre les statuts de commande payés autorisés, complétant ainsi commandes de produits virtuels payées via un paiement non exclu méthodes.

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';
}

Explications

  • Léger et efficace :Ce filtre se déclenche uniquement lorsqu'un paiement en ligne est requis, évitant ainsi conditions inutiles.
  • Précis : Empêche plusieurs notifications client en définissant le statut de la commande sur "terminé" une seule fois.

Solutions alternatives

  • Version améliorée (WooCommerce 3 et supérieur) :
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' );
}
  • Réponse originale (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' );
    }
}

Remarque : Placez les extraits de code dans le fichier function.php de votre thème ou thème enfant actif.

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