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:
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
Vérifiez ma modification. Similaire à l'erreur dans votre question, woocommerce_order_amount_total n'est pas censé être une chaîne html. – helgatheviking