2016-06-27 9 views
5

У нас есть куча продуктов, либо с:WooCommerce: Корзина цена переопределение с текстом

  • Нет Цену
  • Нулевой цена

Мы сделали их продажными с встроенным крюком но по-прежнему отображает их как 0 price во время оформления заказа.

Мы бы хотели, чтобы корзина & проверочная сводка отображала «Специальный заказ» или любой другой текст, но, похоже, WooCommerce делает недействительными текстовые цены.

Пробовал так: WooCommerce: Add product to cart with price override?

выше прекрасно работает с номером переопределение, но когда попытался с текстом переопределить это по умолчанию обратно отображения 0 price.

Почему? Эти продукты построены по заказу, и администратор магазина обновит цену после разговора с клиентом/поставщиком.

ответ

4

Вам необходимо отфильтровать строки, отображающие цену и промежуточный итог в корзине. Ссылка, о которой вы говорили, касалась изменения фактической цены. В вашем случае цена равна $ 0, пока вы не установите фактическую цену позже. Есть, вероятно, фильтры для телеги составляет тоже, но это должно быть начало:

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; 
} 

Конечно, это будет также применяться к любому продукту с 0 ценой и, возможно, не только те, которые вы настроили, чтобы быть на заказ поэтому вам может потребоваться больше условной логики, чем я здесь.

Чтобы следить за вашим комментарием .... woocommerce_order_amount_total - это числовое число, а не отображаемый html. Вы можете увидеть функции, вызываемые в шаблоне 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'); 

Обновленный скриншот: cart

+0

Большое вам спасибо, Helga, это именно то, что было необходимо. Расширенные на вашем примере, чтобы охватить страницы по тележке и проверке! – radug

+0

Проверьте мои изменения. Подобно ошибке в вашем вопросе 'woocommerce_order_amount_total' не должна быть html-строкой. – helgatheviking

1

расширения на ответ Хельги, вот полный код, который изменяет цены на «чтобы определить» на страницах корзины, страницам оформления и подтверждения заказа писем тоже. Текст оставался разным, чтобы люди могли определить, где идет каждый фильтр.

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; 
}; 

 Смежные вопросы

  • Нет связанных вопросов^_^