web-dev-qa-db-fra.com

WooCommerce: Ajouter un produit au panier avec substitution de prix?

$replace_order = new WC_Cart();
$replace_order->empty_cart( true );
$replace_order->add_to_cart( "256", "1");

Le code ci-dessus ajoute le produit 256 au Cart 1 time. Mais le problème que je me pose est que je veux pouvoir annuler complètement le prix du produit ... autant que je sache, la seule chose que je peux faire est d'appliquer un coupon au panier.

Existe-t-il un moyen de remplacer complètement le prix par quelque chose de totalement personnalisé?

34
dcolumbus

Voici le code pour le prix déterminant du produit dans le panier

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {
    $custom_price = 10; // This will be your custome price  
    foreach ( $cart_object->cart_contents as $key => $value ) {
        $value['data']->price = $custom_price;
        // for WooCommerce version 3+ use: 
        // $value['data']->set_price($custom_price);
    }
}

J'espère que ça vous sera utile ...

50

Vous devez introduire une instruction if pour vérifier l'id du produit, dans le code ci-dessus:

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {
    $custom_price = 10; // This will be your custome price  
    $target_product_id = 598;
    foreach ( $cart_object->cart_contents as $value ) {
        if ( $value['product_id'] == $target_product_id ) {
            $value['data']->price = $custom_price;
        }
        /*
        // If your target product is a variation
        if ( $value['variation_id'] == $target_product_id ) {
            $value['data']->price = $custom_price;
        }
        */
    }
}

Ajoutez ce code n'importe où et assurez-vous qu'il est toujours exécutable.

Après avoir ajouté ce code, lorsque vous appelez:

global $woocommerce; 
$woocommerce->cart->add_to_cart(598);

Seul ce produit sera ajouté avec le prix annulé. Les autres produits ajoutés au panier ne seront pas pris en compte.

J'espère que cela vous sera utile.

43

J'ai essayé tous les exemples de code ci-dessus et le dernier woocommerce 3.0 ne prend en charge aucun de ces exemples. Utilisez le code ci-dessous et fonctionne parfaitement pour moi.

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {
    $custom_price = 10; // This will be your custom price  
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        $cart_item['data']->set_price($custom_price);   
    }
}
11
Saran

Après la publication de woocommerce version 3.0.0, le prix du produit est mis à jour lors de l’ajout au panier avec la fonction set_price ($ price). L'exemple est donné ci-dessous:

add_action( 'woocommerce_before_calculate_totals', 'mj_custom_price' );

function mj_custom_price( $cart_object ) {
   $woo_ver = WC()->version; 
   $custom_price = 10;
   foreach ( $cart_object->cart_contents as $key => $value )
   {
       if($woo_ver < "3.0.0" && $woo_ver < "2.7.0")
       {
           $value['data']->price = $custom_price;
       }
       else
       {
           $value['data']->set_price($custom_price);
       }
   }            
}

Merci beaucoup

6
Mohd Jafar

Pour la dernière version de Wordpress et Woocommerce, veuillez utiliser comme ceci

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {
    foreach ( $cart_object->cart_contents as $key => $value ) {
        $custom_price = 5;
        $value['data']->set_price($custom_price); 
    }
}
3
sumon cse-sust

Pour le rendre dynamique (prix de remplacement pour chaque article du panier séparément), vous devez enregistrer le prix du produit de remplacement dans la session avec la clé d’article du panier comme clé de session à l’aide de woocommerce_add_to_cart hook.

en utilisant ces valeurs de session, vous pouvez calculer le total du panier et afficher le prix modifié dans le poste de commande.

1
Sark

Avec WooCommerce 2.5, j'ai trouvé qu'il s'agissait d'un processus en deux parties. La première étape consiste à modifier l'affichage de la tarification au moment de l'exécution lors de son ajout au panier via le filtre woocommerce_add_cart_item. La deuxième partie consiste à définir les données de session persistante qui sont lues lors de la validation via le filtre woocommerce_get_cart_item_from_session. Cela semble être plus rapide que d’accrocher les filtres de calcul des totaux (tels que woocommerce_before_calculate_totals), car ils sont très fréquemment exécutés dans WooCommerce. 

Plus de détails ici: woocommerce modifier le prix tout en ajouter au panier

1
Lance Cleveland

Pour tous ceux qui sont arrivés ici de Google. Ce qui précède est maintenant déconseillé car j'ai découvert la mise à jour de WooCommerce 3.0.1.

Au lieu de ce qui précède, vous devez maintenant utiliser set_price au lieu de price

Voici un exemple:

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
    $custom_price = 10; // This will be your custome price  
    foreach ( $cart_object->cart_contents as $key => $value ) {
        $value['data']->set_price = $custom_price;
    }
}

J'espère que cela aidera les gens à l'avenir :)

1
danyo

add_filter ('woocommerce_cart_item_price', 'kd_custom_price_message');

fonction kd_custom_price_message ($ price) {

    $textafter = ' USD'; 
    return $price . $textafter;

}

0
shrddha patel

Voici comment je l'ai fait. D'abord, j'ajoute mon prix personnalisé à cart_item_data qui permet de sauvegarder les données personnalisées dans les éléments du panier.

function add_donation_to_cart() { 

    $cart_item_data = array('price' => $_REQUEST['donate_amount']);
    $woocommerce->cart->add_to_cart( 5395, 1, '', array(), $cart_item_data);
}


add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart ) {
    foreach ( $cart->cart_contents as $key => $value ) {
        $value['data']->price = $value['price'];
    }
}
0
tobros91