2016-06-27 12 views
5

Nous avons un tas de produits avec soit:WooCommerce: Panier prix override texte

  • Aucun prix
  • prix zéro

Nous les avons fait achetables avec le crochet intégré, mais la Le panier les affiche toujours comme ayant un 0 price lors du paiement.

Nous aimerions que le panier & contrôle de sortie pour afficher "Commande spéciale" ou tout autre texte, mais il semble que WooCommerce invalide les prix en fonction du texte.

Essayé ceci: WooCommerce: Add product to cart with price override?

Les travaux ci-dessus très bien avec une commande prioritaire nombre, mais quand essayé avec un texte préséance par défaut revenir à l'affichage d'un 0 price.

Pourquoi? Ces produits sont fabriqués sur commande et l'administrateur du magasin mettra à jour le prix après en avoir parlé au client/fournisseur.

Répondre

4

Vous devez filtrer les chaînes qui affichent le prix et le sous-total dans le panier. Le lien que vous avez mentionné a discuté de changer le prix réel. Dans votre cas, le prix est $ 0 jusqu'à ce que vous définissiez un prix réel plus tard. Il existe des filtres probablement pour le total du panier aussi, mais cela devrait être un début:

add_filter('woocommerce_cart_item_price', 'so_38057349_cart_item_price', 10, 3); 
function so_38057349_cart_item_price($price, $cart_item, $cart_item_key) { 

    if ($cart_item[ 'data' ]->price == 0) { 
     $price = __('Special Order', 'yourtheme'); 
    } 

    return $price; 
} 


add_filter('woocommerce_cart_item_subtotal', 'so_38057349_cart_item_subtotal', 10, 3); 
function so_38057349_cart_item_subtotal($subtotal, $cart_item, $cart_item_key) { 

    if ($cart_item[ 'data' ]->price == 0) { 
     $subtotal = __('To be determined', 'yourtheme'); 
    } 

    return $subtotal; 
} 


add_filter('woocommerce_order_formatted_line_subtotal', 'so_38057349_order_item_subtotal', 10, 3); 
function so_38057349_order_item_subtotal($subtotal, $item, $order) { 

    if (isset($item[ 'line_subtotal' ]) && $item[ 'line_subtotal' ] == 0) { 
     $subtotal = __('To be determined', 'yourtheme'); 
    } 

    return $subtotal; 
} 

Bien sûr, cela s'appliquera également à tout produit avec un prix 0 et peut-être pas seulement ceux que vous avez configuré pour être personnalisée construit, vous aurez peut-être besoin de plus de logique conditionnelle que celle que j'ai fournie ici.

Pour poursuivre sur votre commentaire .... woocommerce_order_amount_total est le total numérique et non le html affiché. Vous pouvez voir les fonctions appelées dans le modèle cart-totals.php.

function so_38057349_woocommerce_cart_subtotal($cart_subtotal, $compound, $cart) { 
    if($cart->subtotal == 0){ 
     $cart_subtotal = __('Order subtotal to be determined', 'yourtheme'); 
    } 
    return $cart_subtotal; 
}; 
add_filter('woocommerce_cart_subtotal', 'so_38057349_woocommerce_cart_subtotal', 10, 3); 


// define the woocommerce_order_amount_total callback 
function so_38057349_woocommerce_order_amount_total($order_total) { 
    if(WC()->cart->get_total() == 0){ 
     $order_total = __('Order total to be determined', 'yourtheme'); 
    } 
    return $order_total; 
}; 
add_filter('woocommerce_cart_totals_order_total_html', 'so_38057349_woocommerce_order_amount_total'); 

capture d'écran Mise à jour: cart

+0

Merci beaucoup Helga, c'est exactement ce dont nous avions besoin. Développé sur votre exemple pour couvrir le panier et les pages de paiement aussi! – radug

+0

Vérifiez ma modification. Similaire à l'erreur dans votre question, woocommerce_order_amount_total n'est pas censé être une chaîne html. – helgatheviking

1

expansion sur la réponse de Helga, voici le code complet qui change les prix pour « à déterminer » sur les pages de panier, pages de paiement et des e-mails de confirmation de commande aussi. Le texte reste différent afin que les gens puissent voir où chaque filtre va.

add_filter('woocommerce_cart_item_price', 'filter_cart_item_price', 10, 3); 
function filter_cart_item_price($price, $cart_item, $cart_item_key) { 
    if ($cart_item[ 'data' ]->price == 0) { 
     $price = __('Special Order', 'yourtheme'); 
    } 
    return $price; 
} 

add_filter('woocommerce_cart_item_subtotal', 'filter_cart_item_subtotal', 10, 3); 
function filter_cart_item_subtotal($subtotal, $cart_item, $cart_item_key) { 
    if ($cart_item[ 'data' ]->price == 0) { 
     $subtotal = __('To be determined', 'yourtheme'); 
    } 
    return $subtotal; 
} 

add_filter('woocommerce_cart_subtotal', 'filter_woocommerce_cart_subtotal', 10, 3); 
function filter_woocommerce_cart_subtotal($cart_subtotal, $compound, $instance) { 
    $cart_subtotal = __('To be determined 4', 'yourtheme'); 
    return $cart_subtotal; 
}; 


add_filter('woocommerce_order_formatted_line_subtotal', 'filter_order_item_subtotal', 10, 3); 
function filter_order_item_subtotal($subtotal, $item, $order) { 
    if (isset($item[ 'line_subtotal' ]) && $item[ 'line_subtotal' ] == 0) { 
     $subtotal = __('To be determined 2', 'yourtheme'); 
    } 
    return $subtotal; 
} 

add_filter('woocommerce_order_subtotal_to_display', 'filter_woocommerce_order_subtotal_to_display', 10, 3); 
function filter_woocommerce_order_subtotal_to_display($subtotal, $compound, $instance) { 
     $subtotal = __('To be determined 6', 'yourtheme'); 
    return $subtotal; 
}; 

add_filter('woocommerce_get_formatted_order_total', 'filter_woocommerce_get_formatted_order_total', 10, 2); 
function filter_woocommerce_get_formatted_order_total($formatted_total, $instance) { 
     $formatted_total = __('To be determined 8', 'yourtheme'); 
    return $formatted_total; 
};