web-dev-qa-db-fra.com

Changer le prix total du panier dans WooCommerce

Je rencontre des problèmes avec le total du panier affichant uniquement 0

Essentiellement, ce que j'essaie de faire, c'est d'accepter un dépôt total d'un certain montant après que tous les articles du panier ont été ajoutés au sous-total des paniers.

Ainsi, par exemple, si le client ajoute une valeur de 100 $ d'articles, il ne paiera que 10 $ initialement ou (10%) du sous-total comme valeur totale.

J'ai pris le code d'ici: Changer le total et tax_total Woocommerce et le personnaliser de cette façon:

add_action('woocommerce_cart_total', 'calculate_totals', 10, 1);

function calculate_totals($wc_price){
$new_total = ($wc_price*0.10);

return wc_price($new_total);
} 

Mais le montant total affiche 0,00 lorsque ce code est activé. Si supprimé le code, j'obtiens le total standard.

Je n'ai pas non plus pu trouver sur le site de woocommerce où l'API complète est répertoriée, uniquement des articles génériques liés à la façon de créer un plugin.

Toute aide ou un point dans la bonne direction serait formidable.

7
DEVPROCB

Depuis Woocommerce 3.2+ cela ne fonctionne plus avec la nouvelle classe _WC_Cart_Totals_ ...

Nouvelle réponse: Modifier le total du panier à l'aide de crochets dans Woocommerce 3.2 +


Le premier _woocommerce_cart_total_ crochet est un filtre crochet, pas un crochet d'action. Aussi comme _wc_price_ argument dans _woocommerce_cart_total_ est le prix formaté , vous ne pourrez pas l'augmenter de 10%. C'est pourquoi il renvoie zéro.

Avant Woocommerce v3.2 cela fonctionne comme certaines _WC_Cart_ propriétés peut être accessible directement

Vous devriez mieux utiliser une fonction personnalisée accrochée au _woocommerce_calculate_totals_ crochet d'action
par ici:

_// Tested and works for WooCommerce versions 2.6.x, 3.0.x and 3.1.x
add_action( 'woocommerce_calculate_totals', 'action_cart_calculate_totals', 10, 1 );
function action_cart_calculate_totals( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( !WC()->cart->is_empty() ):
        ## Displayed subtotal (+10%)
        // $cart_object->subtotal *= 1.1;

        ## Displayed TOTAL (+10%)
        // $cart_object->total *= 1.1;

        ## Displayed TOTAL CART CONTENT (+10%)
        $cart_object->cart_contents_total *= 1.1;

    endif;
}
_

Le code va dans le fichier function.php de votre thème enfant (ou thème) actif ou aussi dans n'importe quel fichier de plugin.

Il est également possible d'utiliser WC_cart add_fee() méthode dans ce crochet, ou utilisez-la séparément comme dans Cristina réponse.

9
LoicTheAztec

Cela ne répond pas à cette question. Loic le fait. Voici une autre façon de le faire pour afficher un élément de campagne de 10% de réduction:

function prefix_add_discount_line( $cart ) {

  $discount = $cart->subtotal * 0.1;

  $cart->add_fee( __( 'Down Payment', 'yourtext-domain' ) , -$discount );

}
add_action( 'woocommerce_cart_calculate_fees', 'prefix_add_discount_line' );

enter image description here

15
Christina