Votre panier précédent a été vidé car les précommandes doivent être achetées séparément
J’envisage d’acheter des précommandes WooCommerce et j’ai consulté la copie d’un ami pour la démo. C’est un excellent plugin, mais j’ai un problème que je n’arrive pas à résoudre.
Lors de votre commande, vous ne pouvez commander qu’une seule variante d’un produit à la fois. Vous pouvez modifier la quantité de cette variation dans le panier mais vous ne pouvez pas ajouter 2 variantes du même produit au même panier en même temps. Si vous le faites, cela videra le panier et le remplacera par la sélection actuelle. Étant donné que je prendrais des précommandes de vêtements sérigraphiés (semblables à teespring), il est important de commander plusieurs variantes (tailles dans ce cas) en même temps. Leur faire passer plusieurs commandes à partir du même produit ne ferait que les faire fuir.
Je ne veux pas permettre aux clients de commander plusieurs précommandes à la fois puisque chaque produit précommandé a une date de sortie/expédition différente, mais je veux leur permettre de commander plusieurs variantes, c’est-à-dire un petit t-shirt, un t-shirt moyen et un grand t-shirt. d’un produit particulier puisqu’ils seraient tous expédiés en même temps.
J’espère que tout cela avait du sens.
Voici le code responsable des restrictions de panier. Toute aide est très appréciée.
Solution
Je sais que ce post est ancien. Mais revenons à ce même problème et j’ai résolu mon problème comme ça.
J’ai modifié la fonction validate_cart() dans woocommerce-pre-orders/includes/class-wc-pre-orders-cart.php
C’est comme ça :
public function validate_cart( $valid, $product_id ) {
global $woocommerce;
if ( WC_Pre_Orders_Product::product_can_be_pre_ordered( $product_id ) ) {
if( $woocommerce->cart->get_cart_contents_count() >= 1 ) {
if ( $this->cart_contains_pre_order() ) {
return $valid;
}
$string = __( 'Your cart contains items, please complete that order first and then purchase pre-order items, because pre-orders must be purchased separately.', 'wc-pre-orders' );
// Backwards compatible (pre 2.1) for outputting notice
if ( function_exists( 'wc_add_notice' ) ) {
wc_add_notice( $string );
} else {
$woocommerce->add_message( $string );
}
$valid = false;
return $valid;
}
else
{
return $valid;
}
} else {
// if there's a pre-order in the cart already, prevent anything else from being added
if ( $this->cart_contains_pre_order() ) {
// Backwards compatible (pre 2.1) for outputting notice
if ( function_exists( 'wc_add_notice' ) ) {
wc_add_notice( __( 'This product cannot be added to your cart because it already contains a pre-order, which must be purchased separately.', 'wc-pre-orders' ) );
} else {
$woocommerce->add_error( __( 'This product cannot be added to your cart because it already contains a pre-order, which must be purchased separately.', 'wc-pre-orders' ) );
}
$valid = false;
}
}
return $valid;
}
Remarque : je sais que ce n’est pas la bonne méthode de mise en œuvre. Parce que j’ai édité directement dans le plugin. Ainsi, lorsque le plugin sera mis à jour, les modifications ne seront plus là. Et vous pouvez utiliser n’importe quel « return $valid » ou « return true » ou « return false » selon votre choix.
Merci