Отображение виджета мини-корзины WooCommerce на странице оформления заказа и его безопасное обновление через переопределение виджета
Прежде чем задать вопрос здесь, хочу сообщить, что я уже спрашивал на Stack Overflow и форуме WordPress, но не получил ответа. Поэтому я пришел сюда.
Я установил плагин WooCommerce на WordPress 3.5.2. В целом WooCommerce работает нормально. Я создал папку woocommerce и скопировал все файлы шаблонов WooCommerce в папку моей темы. Но есть проблема, с которой я столкнулся. На странице оформления заказа WooCommerce я хочу показать итоги корзины в сайдбаре. Но они там не отображаются. На других страницах все работает нормально. Может кто-нибудь подсказать, что здесь не так? Буду благодарен за любую помощь и предложения. Спасибо
Обновление
Вот скриншот виджета корзины WooCommerce в сайдбаре, который отображается на всех страницах, кроме страницы оформления заказа.
Редактирование:
Дополнительно, как сделать это изменение безопасным при обновлениях?
Виджет корзины не отображается, потому что он настроен на скрытие на страницах корзины и оформления заказа
. Если вы хотите изменить это поведение, посмотрите файл 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)
- Дублируйте файл
class-wc-widget-cart.php
; - Скопируйте дубликат в папку внутри вашей темы, например:
cust_woo_widgets
; - Внесите указанные выше изменения в файл;
Дополнительно внесите следующие изменения в дубликат виджета:
class Custom_WooCommerce_Widget_Cart extends WooCommerce_Widget_Cart { function widget( $args, $instance ) { // скопируйте функцию widget из woocommerce/classes/widgets/class-wc-widget-cart.php } }
Добавьте следующий код в ваш файл
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' ); } }
Примечание: Подробности смотрите в источнике; не тестировалось.

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

Обычно вы можете переопределять шаблоны 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.

это должно быть правильным решением, фильтр был добавлен WooCommerce - ответ от @something устарел. также можно использовать метод __return_false:
add_filter( 'woocommerce_widget_cart_is_hidden', '__return_false', 40, 0 );

Не рекомендуется изменять основной файл плагина, так как при обновлении ваши изменения будут потеряны. Лучше использовать следующий код, чтобы отображать виджет корзины в сайдбаре на странице оформления заказа:
add_filter('woocommerce_widget_cart_is_hidden', 'show_cart_on_checkout');
function show_cart_on_checkout()
{
return is_cart();
}
