Отображение виджета мини-корзины WooCommerce на странице оформления заказа и его безопасное обновление через переопределение виджета

2 июл. 2013 г., 10:13:53
Просмотры: 31.3K
Голосов: 6

Прежде чем задать вопрос здесь, хочу сообщить, что я уже спрашивал на Stack Overflow и форуме WordPress, но не получил ответа. Поэтому я пришел сюда.

Я установил плагин WooCommerce на WordPress 3.5.2. В целом WooCommerce работает нормально. Я создал папку woocommerce и скопировал все файлы шаблонов WooCommerce в папку моей темы. Но есть проблема, с которой я столкнулся. На странице оформления заказа WooCommerce я хочу показать итоги корзины в сайдбаре. Но они там не отображаются. На других страницах все работает нормально. Может кто-нибудь подсказать, что здесь не так? Буду благодарен за любую помощь и предложения. Спасибо

Обновление

Вот скриншот виджета корзины WooCommerce в сайдбаре, который отображается на всех страницах, кроме страницы оформления заказа.

Виджет мини-корзины WooCommerce в сайдбаре

Редактирование:
Дополнительно, как сделать это изменение безопасным при обновлениях?

0
Все ответы на вопрос 3
2

Виджет корзины не отображается, потому что он настроен на скрытие на страницах корзины и оформления заказа. Если вы хотите изменить это поведение, посмотрите файл class-wc-widget-cart.php, там вы найдёте следующую строку:

if ( is_cart() || is_checkout() ) return;  

Измените её на:

if ( is_cart() ) return;  

Чтобы виджет отображался на странице оформления заказа.

Примечание: Если изменения сделаны в папке plugins/woocommerce/classes/widgets, они будут перезаписаны при обновлениях.


Редактирование: Дополнительная информация о том, как переопределить виджет и сделать изменения безопасными для обновлений
Источник: http://www.skyverge.com/blog/overriddin-woocommerce-widgets/ (Вариант 5)

  1. Дублируйте файл class-wc-widget-cart.php;
  2. Скопируйте дубликат в папку внутри вашей темы, например: cust_woo_widgets;
  3. Внесите указанные выше изменения в файл;
  4. Дополнительно внесите следующие изменения в дубликат виджета:

    class Custom_WooCommerce_Widget_Cart extends WooCommerce_Widget_Cart {
      function widget( $args, $instance ) {
    // скопируйте функцию widget из woocommerce/classes/widgets/class-wc-widget-cart.php
      }
    }
    
  5. Добавьте следующий код в ваш файл functions.php:

    add_action( 'widgets_init', 'override_woocommerce_widgets', 15 );
    function override_woocommerce_widgets() { 
      if ( class_exists( 'WooCommerce_Widget_Cart' ) ) {
        unregister_widget( 'WooCommerce_Widget_Cart' ); 
        include_once( 'cust_woo_widgets/widget-cart.php' );
        register_widget( 'Custom_WooCommerce_Widget_Cart' );
      } 
    }
    

Примечание: Подробности смотрите в источнике; не тестировалось.

2 июл. 2013 г. 11:25:18
Комментарии

спасибо за ответ, но не могли бы вы рассказать про обновления плагинов? То есть, когда плагин будет обновлен, изменения перезапишутся. Как это решить?

NewUser NewUser
2 июл. 2013 г. 13:02:02

Обычно вы можете переопределять шаблоны WooCommerce: http://docs.woothemes.com/document/template-structure/, но с виджетами это не (всегда) так просто. Для получения дополнительной информации о том, как это сделать, прочитайте это: http://www.skyverge.com/blog/overriddin-woocommerce-widgets/; и это: http://wordpress.org/support/topic/possible-to-overwrite-a-woocommerce-widget.

Nicolai Grossherr Nicolai Grossherr
2 июл. 2013 г. 13:14:19
2

Я добавил следующий код в свой functions.php, и теперь корзина отображается на всех моих страницах.

add_filter( 'woocommerce_widget_cart_is_hidden', 'always_show_cart', 40, 0 );
function always_show_cart() {
    return false;
}
13 мар. 2016 г. 12:32:47
Комментарии

это должно быть правильным решением, фильтр был добавлен WooCommerce - ответ от @something устарел. также можно использовать метод __return_false:

add_filter( 'woocommerce_widget_cart_is_hidden', '__return_false', 40, 0 );

cyptus cyptus
20 февр. 2017 г. 17:53:05

Оба фильтра больше не работают - есть идеи почему?

NewUser NewUser
30 нояб. 2017 г. 02:03:27
0

Не рекомендуется изменять основной файл плагина, так как при обновлении ваши изменения будут потеряны. Лучше использовать следующий код, чтобы отображать виджет корзины в сайдбаре на странице оформления заказа:

add_filter('woocommerce_widget_cart_is_hidden', 'show_cart_on_checkout');

    function show_cart_on_checkout()
    {
        return is_cart();
    }
15 мар. 2017 г. 10:58:41