(WooCommerce) Удаление боковой панели только на странице отдельного товара

4 янв. 2014 г., 04:59:43
Просмотры: 28.1K
Голосов: 1

Я создаю тему и не хочу отображать боковую панель на странице отдельного товара.

Следуя рекомендациям WooCommerce, я сделал копию папки "templates" (из плагина woocommerce) и установил её в mytheme/templates, изменив название папки на "woocommerce". В корне моей темы я создал файл sidebar-shop.php.

На данный момент у меня боковая панель отображается как на странице магазина, так и на странице отдельного товара. Я пытался удалить do_action('woocommerce_sidebar'); из woocommerce/single-product.php, а также пытался создать условие в woocommerce/shop/sidebar.php, что-то вроде:

if (!is_page('single-product') { 
    get_sidebar('shop'); 
}

но боковая панель остаётся.

Есть ли рабочий способ удалить боковую панель только на странице отдельного товара?

2
Комментарии

Думаю, тебе также нужно добавить эту строку в файл шаблона single-product - remove_action( 'woo_main_after', 'woocommerce_get_sidebar', 10)

Shazzad Shazzad
4 янв. 2014 г. 05:24:01

Попробовал, но не сработало.

Rico Letterman Rico Letterman
4 янв. 2014 г. 05:55:42
Все ответы на вопрос 3
4

Условный тег для отдельных товаров — это is_product()

add_action('template_redirect', 'remove_sidebar_shop');
function remove_sidebar_shop() {
if ( is_product('add-page-i.d-here') ) {
    remove_action('woocommerce_sidebar', 'woocommerce_get_sidebar');
    }
}

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

Условные теги WooCommerce http://docs.woothemes.com/document/conditional-tags/

4 янв. 2014 г. 11:46:21
Комментарии

is_product() — это просто обёртка для is_singular('product'). Так что оба варианта работают одинаково.

Abhik Abhik
4 янв. 2014 г. 14:31:32

Вам нужно будет добавить slug страницы товара: if ( is_product('t-shirt') ) {

Brad Dalton Brad Dalton
4 янв. 2014 г. 14:36:04

А как быть, если я хочу удалить это для всех товаров? То есть без указания конкретного ID

Rico Letterman Rico Letterman
6 янв. 2014 г. 00:15:51

if ( is_product() ) {

Brad Dalton Brad Dalton
6 янв. 2014 г. 00:28:46
2

Вот как это делается..

function remove_sidebar_shop() {
    if ( is_singular('product') ) {
        remove_action('woocommerce_sidebar', 'woocommerce_get_sidebar');
    }
}
add_action('template_redirect', 'remove_sidebar_shop');
4 янв. 2014 г. 05:36:06
Комментарии

Абхик, код выглядел многообещающе, но тоже не сработал. Интересно, является ли "product" реальным ID страницы single-product. В любом случае, спасибо.

Rico Letterman Rico Letterman
4 янв. 2014 г. 05:58:18

@serranegra моя ошибка. init слишком поздний момент для удаления действия. Код исправлен и теперь должен работать нормально.

Abhik Abhik
4 янв. 2014 г. 08:34:52
0
function remove_storefront_sidebar() {
    if ( is_product() ) {
    remove_action( 'storefront_sidebar', 'storefront_get_sidebar', 10 );
    }
}
add_action( 'get_header', 'remove_storefront_sidebar' );

Работает с последней версией WooCommerce 2.5.2 Также необходим CSS:

.single-product.right-sidebar .content-area {
  float: none;
  margin-right: 0;
  width: 100%;
}
12 февр. 2016 г. 03:06:07