Как изменять WooCommerce. Эпизод #3. Страница архивов

Артем Абрамович

Меня зовут Артем Абрамович и я являюсь фрилансером-вордпресером. Занимаюсь настройкой и редактированием сайтов созданных на CMS WordPress. Это основная моя специализация, есть еще несколько работ, которыми я занимаюсь, но обо этом вы можете более подробно узнать из моего портфолио.

98 комментариев к “Как изменять WooCommerce. Эпизод #3. Страница архивов”

  1. Супер! Это именно то что нужно тем кто занимается товаркой! Большое спасибо Вам за способ для вывода артикулов товарам в категориях!

    Ответить
  2. Артем, как массово изменить атрибуты товара для фильтра? , у меня более 2000 товаров,. Не всем товарам задать атрибут, а именно выбрать и задать.

    Ответить
    • Как это выбрать и задать? Такое только вручную возможно. Ну или какой-то хитрый импорт делать

      Ответить
  3. Здравствуйте! Подскажите пожалуйста плагин Мессенджера Фейсбук именно для темы Storefront, ярлык которого не будет закрывать «Корзину» на мобильной версии и «Следующий товар» (в теме Storefront) на компьютере?

    Ответить
  4. Отличный выпуск, вот только почему add это адэдэ, а loop это не лооп, а просто луп?))

    Ответить
    • Специально так, а то о чем еще говорить?)) А тут повод комент написать)

      Ответить
  5. Видео очень полезное, но мне еще учиться и учиться… Расскажите пожалуйста какой файл отвечает за просчет количества и характеристик товаров, дабы можно о было задать конкретному товару список характеристики … Не совсем понимаю как реализовать калькулятор… Или направьте на путь истинный …

    Ответить
    • Смотрите предыдущий эпизод, там было про это. А так за эи характеристики отвечает файл product-atributes
      Калькулятор чего? Тут надо от задачи танцевать

      Ответить
  6. Здесь описана методика для классических тем оформления через хуки в functions.php — если в теме подключается свой content-product.php — артикул можно в нем вывести без вызова самой функции (скопировав только от до ) — многое зависит от вашей темы оформления, если опыта мало то не забывайте делать бекап файлов и базы данных

    Ответить
  7. Добрый день!!! Есть вопрос не совсем по теме. Есть магазин на woocommerce, мне нужно сделать, так чтобы в зависимости от города России, выдавалась одинаковая страница со своими ценами и условиями (мультирегиональность вроде называется)? Как это правильней сделать? Или подскажите направление, инфу, плагины и т. д. ? Вида типа такой https://mysite/moscov/product-category/converce в место moscov разный город

    P.S. Возможно фильтровать от того какой город выберет пользователь

    Ответить
    • Добрый! Ну возможно конечно, но это просто так не сделать, там надо через WP_SITEURL делать. По типу мультиязычности, но сам такого никогда не делал, точно не скажу

      Ответить
    • Этот плагин просто список городов выводит. А вам то надо еще и геотаргетинг прикручивать, чтобы город определялся и по этому определению срабатывала нужная ссылка.

      Ответить
  8. Добрый день!!Столкнулся с проблемой импорта товаров из каталога в виде таблицы Excel в магазин на WP. Видеообзоры,которые нашел на просторах ютюба не совсем понятны. Может вас заинтересует как тема для последующих видео на вашем канале?

    Ответить
    • Добрый! Для импорта проще всего использовать плагин WP all in Import — и бесплатно, и удобно, и понимает любой формат

      Ответить
    • Поддерживаю. Хороший плагин. Правда у меня про установлен, не знаю чем от бесплатного отличается. Для ву еще аддон нужен

      Ответить
  9. Подскажите пожалуйста, как можно сделать вывод товаров на другой странице(например на главной) и чтоб такие же товары оставались и на странице магазина

    Ответить
    • Есть шорткоды для этого. Можно на любой странице выводить как угодно и любые товары

      Ответить
  10. Артем, приветсвую.
    Дождался этих видео, в нормальном формате, но не дождался ответа на вопрос.

    Когда-то спрашивал — для страниц категорий, если нужно выводить дескрипшен(вверху) и еще некоторые блоки (например некоторый текст/посты и тп) внизу страницы — твое видение?
    Как лучше сделать?
    Пока что пихал в functions по условию is_category do_shortcode. И далее уже либо пост выводил, либо любой шорткод темы.
    Мне кажется как-то топорно. Хотелось бы узнать твое мнение.
    Может существует более красивое решение?

    Ответить
    • Если мне надо дескрипшн + еще другие блоки текста (посты и тп)

      и вверху и снизу.. ну собсно неважно где.. но несколько блоков текста.

      Ответить
    • Откуда эти блоки текста берутся? Они одинаковые для всех страниц категорий или уникальные для каждой категории?

      Ответить
    • Все разные.
      Выводил шорткодом пост через его таксономию сделанную под категорию.
      Можно конечно и в функшнз хтмл пихануть…
      Но чтото не нравится мне…

      Мб завести както кастомные поля для категорий?
      Как когдато научил делать в админке для страниц?

      Ответить
    • Ох, епт.. осталось только применить это.
      пока что туманно представляю)

      Ответить
  11. Все просто супер. Услышал много ответов на свои вопросы

    Ответить
  12. Было бы очень круто узнать, как на вукомерсе организовать предоплату! Вот это реально полезная вещь была бы)

    Ответить
    • Я наверное не правильно выразился. Есть вариант полной оплаты, и в этом случае доставка бесплатно. А есть вариант отправки наложенным платежом, и в этом случае нужно предоплата, в енную сумму, и разные квитанции на почту соответственнно. Но наверное это более серьёзная инфа, за которую обычно берут деньги. Но если бы вы смогли показать как это делается, было бы круто!)

      Ответить
    • @Last Day On Earth: Survival Dim4ik У вас как-то логика не бьется) Наложенный платеж как бы предполагает оплату после получения товара)
      Но формально да, так можно сделать. Оплата в зависимости от способа доставки. Только простого способа не знаю. Может быть плагин какой есть

      Ответить
  13. подскажите хук для woomerce как убрать название категории на странице тема океан вп ))
    если в самой теме выключаю убирается и у карточки товара (

    Ответить
  14. Огромное спасибо!!! Целый день убил на безуспешные поиски информации о исправлении этой кривой сетки категорий. Потом вспомни, что у вас есть целый плейлист по WC. Жалею, о том, что раньше не вспомнил, так бы день сэкономил)))

    Ответить
  15. Приветствую, могли бы вы подсказать, как изменить работу кнопки. Мне нужно сделать, что бы при нажатие на данную кнопку всплывало окно для обратной связи. Что для этого нужно использовать и как поменять функцию кнопки.

    Ответить
  16. Добрый день. Подскажите а как можно отключить фильтр по цене в определенной категории.
    Например Есть 5 категорий товара, в сайтбаре выведены фильтры по атребутам для каждой категории и только на 1 странице надо фильтр по цене.

    Ответить
  17. Подскажите, как можно добавить дополнительное описание внизу категории товара, чтобы его можно было изменять через доп. поле на странице рубрики? Я знаю, есть плагины, но хочу это реализовать без них. Искал у вас на сайте код, но что-то не нашел, может подскажите ссылку, если есть решение

    Ответить
  18. Не знаю, как на момент записи видео, но сейчас имеется возможность выводить на странице магазина либо категории, либо товары, либо и то и другое вместе. Страница магазина > настроить > Woocommerce > Каталог товаров.

    Ответить
  19. Добрый день!
    А в каком файле фильтр лежит, найти не могу? Подскажите пожалуйста

    Ответить
  20. В жизни не додумался бы, что вывод подкатегорий вешается на woocommerce_product_loop_start. Спасибо! Кстати, на github не всегда хороший вариант искать функции. У меня на фразу «woocommerce_output_product_categories» в файле wc-template-functions.php github выдал 2 результата хотя эта фраза встречается там 5 раз. Там, конечно, есть внизу упоминание «Showing the top two matches
    «, но я это заметил только когда писал этот комментарий.

    Ответить
    • Согласен, гитхаб не всегда находит, поэтому я через Штром теперь все смотрю

      Ответить
  21. Добрый день! Подскажите пожалуйста, возможно ли вывести блоки количества товаров и их сортировку на произвольной странице? Я создал обычную страницу, на которой вывел с помощью шорткода товары одной конкретной категории. Всё отображается корректно. Единственное, что смущает — на странице отсутствуют блоки сортировки и количества отображаемых товаров (на страницах woocommerce они есть — тема oceanwp). Есть ли несложное решение, чтобы «прикрутить» эти элементы к этой конкретной странице? Я в коде не силён…Заранее спасибо за любую подсказку в данном направлении

    Ответить
    • Ну прям несложного если только блоки использовать из WooCommerce Blocks там есть возможность так листинги выводить

      Ответить
  22. а на какой странице все это обрачивается в единый контейнер? мне нужно спозиционировать страницу категорий и сайдбар, но не понимаю где можно прописать клас обертку и контейнер… тема Underscore

    Ответить
    • Ну если единый, то может отравать тег в шапке, а закрывать в подвале

      Ответить
  23. Сейчас такое удаление хуков/фильтров не работает(Проверено на WP5.5.3+WC4.7.0-иных плагинов нет). В случае фильтра 27:01(Разбиение петли категорий+товаров на отдельные) нужно так:

    add_filter( ‘woocommerce_product_loop_start’, function($loop_start) {
    remove_filter( ‘woocommerce_product_loop_start’, ‘woocommerce_maybe_show_product_subcategories’ );
    return $loop_start;
    }, 1 );
    add_action(‘woocommerce_before_shop_loop’, function() {
    woocommerce_product_loop_start();
    echo woocommerce_maybe_show_product_subcategories();
    woocommerce_product_loop_end();
    }, 40);
    Работает. Хотя на мой нубский взгляд, смущает приоритет 1, такая кувалдочка на мелкий гвоздик.

    Ответить
    • Удаление хуков может и не срабатывать, особенно в сложных темах. Но вешать отключение на этот фильтр — не очень правильно, работать будет, может и сломать что-нибудь.

      Надежнее так отключать
      add_action( ‘after_setup_theme’, function() {
      remove_filter( ‘woocommerce_product_loop_start’, ‘woocommerce_maybe_show_product_subcategories’ );

      } );

      На хуке after_setup_theme, хук запускается перед загрузкой темы и на нем можно и нужно отключать нужные хуки

      Ответить
    • @@wpruse Видела этот вариант, но он для некоторых хуков не срабатывал, поэтому использовала вариант выше. Но, да попробовала – хук ‘after_setup_theme’ , для убирания категорий отлично подходит, и его безопаснее использовать.

      По поводу несрабатывания ‘after_setup_theme’ – например
      remove_action( ‘woocommerce_before_main_content’, ‘woocommerce_breadcrumb’, 20 );
      // github.com/woocommerce/woocommerce/blob/master/templates/archive-product.php

      К слову сказать, поковырявшись, увидела для хлебных крошек более простые варианты (и даже нашла место переопределения). Но тут важнее сама идея, когда надо убрать хук/фильтр, по-простому не получается, ‘after_setup_theme’ не срабатывает, вероятно он где-то уже удаляется/переопределяется, и такая ‘кувалдочка’ помогает, не требуя разбираться где и как.

      Ответить
    • after_setup_theme всегда срабатывает, так запускается раньше, но вполне может быть что он уже использвоан где-то в теме и имеет смысл его использовать с другим приоритетом

      Ответить
    • @@wpruse Ну-ну, а вы сами попробуйте(приоритет менялся от 1 до 100)
      add_action( ‘after_setup_theme’, function() {
      remove_action( ‘woocommerce_before_main_content’, ‘woocommerce_breadcrumb’, 20 );
      // github.com/woocommerce/woocommerce/blob/master/templates/archive-product.php#L23
      } );

      И after_setup_theme в данном случае не причем — обошлось без него. Всего лишь обычный:
      add_action( ‘storefront_before_content’, ‘woocommerce_breadcrumb’, 10 );
      // themes/storefront/inc/woocommerce/ storefront-woocommerce-template-hooks.php

      Вот так вот, тема storefront перевесила хлебные крошки на другой хук в своих файлах и дефолтный из очевидного archive-product.php не переопределяется даже с помощью ‘after_setup_theme’.

      Ответить
    • Если я правильно понял проблему, то есть разные ситуации. Со storefront — это первая ситуация, когда тема переопределяет хуки вукомерса, вторая ситуация — когда приходиться переопределять хуки, через дочернюю тему, которые уже переопределены в родительской.
      Вот во втором случае, как раз проще всего через after_setup_theme это делать, а в первом случа можно вообще как угодно делать и after_setup_theme не нужен, так как родительская тема имеет больший приоритет.
      Есть еще третий случай, когда приходить переопределять хуке в дочерке, которые переопределены в родителе через класс, вот там вообще атас.

      Так что, в storefront все правильно сделано. При разработке тем можно и нужно ориентироваться именно на эту тему

      Ответить
    • @Финты WordPress Правильность/неправильность сделанного в Storefront я не оцениваю. Исходная предпосылка появления костыля в 1м комментарии была в том, что remove_action(+after_setup_theme) могут не срабатывать, вопрос почему и что делать(отчасти подозрения где искать появились).

      Но вот по поводу последнего вашего комментария – возможно, стоит лучше осмыслить, учитывая 2 момента:
      1) Есть вероятность, что сейчас без after_setup_theme удаление хуков просто так не всегда работает (многие примеры в ваших видео из данного плейлиста не запустились пока не был добавлен after_setup_theme), функции исходного woocommerce, тема Storefront.

      https://www.youtube.com/watch?v=IRxOu5XZh2s&list=PLzFj4L-LMRzsaNrS00le_wWsZed7PTu2F&index=1 10m20s
      (хлебные крошки, результаты
      )

      remove_action( ‘woocommerce_shop_loop_item_title’, ‘woocommerce_template_loop_product_title’, 10 ); // убрать заголовок товара в архиве товаров
      woocommerce/templates/content-product.php
      remove_action( ‘woocommerce_before_shop_loop’, ‘woocommerce_result_count’, 20 ); // Убрать кол-во результатов
      woocommerce/ templates/archive-product.php

      (По-вашему комментарию, эти 2 хука должны быть переопределены темой storefront где-то здесь: /themes/storefront/inc/storefront-template-hooks.php или /themes/storefront/inc/woocommerce/ , чтобы требовать after_setup_theme. )
      Или это 3й вариант для таких простейших хуков(переопределены через класс в Storefront)?

      2) Даже after_setup_theme не гарантирует 100%-е манипулирование хуками. Примеры таки хуков
      woocommerce/templates/archive-product.php:
      remove_action( ‘woocommerce_before_main_content’, ‘woocommerce_breadcrumb’, 20 ); // хлебные крошки
      remove_action( ‘woocommerce_before_shop_loop’, ‘woocommerce_catalog_ordering’, 30 ); // выпадающее меню сортировки – оно вообще неубираемый какой-то

      PS: Вот это вот все не требование ответа, есть вероятность, что и сами вопросы на данный момент не совсем корректны – я еще только разбираюсь. Это лишь наблюдение и предварительные проблемы/размышления.
      Ну и легкое недоумение – почему не работают примеры без after_setup_theme и по этому поводу нет вопросов в комментария.

      Ответить
    • 1. Специально видео пересмотрел) Обратите внимание, какая тема используется для отключения хуков. Там используется дефолтная тема, в которой хуки Вукомерса никак не используются, именно поэтому все отключается просто и не замысловато. Как только будет использоваться дочерка лобой темы, которая внутри себя переопределяет хуки, тут без after_setup_theme не обойтись
      2. А я и не говорил, что after_setup_theme — панацея, тут надо смотреть индивидуально, так как сегодня многие темы написаны с использованием ООП, но при этом хуки там переопределяют так, что приходиться писать специальные функции, чтобы переопределить что-то.

      «почему не работают примеры без after_setup_theme» — то же индивидуально надо рассматривать, но в целом, это происходит именно из-за темы и того как она написана.

      Попробуйте взять дефолтную тему, просто новую пустую тему и, например, тему OceanWP и посмотрите как это все будет работать

      Ответить
    • @Финты WordPress storefront 2.9.0 + чистый плагин + выборочно — в дочерней теме https://github.com/stuartduff/storefront-child-theme

      В основном тестирую в плагине, но когда возникали проблемы — параллельно проверялось в дочерней Storefront.

      Весь список не озвучу, но как минимум:
      remove_action( ‘woocommerce_shop_loop_item_title’, ‘woocommerce_template_loop_product_title’, 10 ); — без after_setup_theme не убирается в плагине, но это возможно в дочерней теме
      remove_action( ‘woocommerce_before_shop_loop’, ‘woocommerce_result_count’, 20 ); — без after_setup_theme не убирается в плагине и не убирается в дочерней теме
      remove_action( ‘woocommerce_get_breadcrumbp’, ‘woocommerce_breadcrumb’, 20 ); — не убирается вообще ни в плагине, ни в дочерней теме, и не важно есть after_setup_theme или нет.

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

      Ответить
  24. Приветствую, а как можно отключить сортировку, есть ли такой хук?

    Ответить
    • Задача такая: я хочу в блок вёрстки с этой сортировкой вставить справа переключатель валют

      Ответить
    • поэтому хотел вцепиться за этот хук и добавить через акцию переключатель

      Ответить
  25. Ничего не понятно! Говорит какую-то хрень! Нет нормальный курс сделать, надо делать уроки понятные только ему!

    Ответить
    • Едрить, зачем тогда смотреть? Есть и другие видео более понятные, смотрите их

      Ответить
  26. Вывожу на главной странице магазина «наиболее продаваемые товары». Карточка формируется в файле woocommercepackageswoocommerce-blockssrcBlockTypesAbstractProductGrid.php. Создав дубликат файла и положив его в папку темы (соблюдая все дерево папок) ничего не поменялось. Посмотрел третий эпизод. К сожалению изменив карточку арховов я не меняю карточку «наиболее продаваемых товаров». Хуков не нашел. Прошу подсказать — существуют ли хуки для изменения данных карточек?

    Ответить
    • Судя по пути, вы используете блоки. Блоки — это такая вещь в себе и они не используют штатный вывод данных как на других страницах архивов. Соответственно, подменой файлов там ничего не сделать.

      Можно через базовые хуки парсинга блоков попытаться хтмл поменять, но в свое время у меня не получилось ничего. Надо еще раз попробовать.

      Пока выкручиваюсь другими способами или использую штатные шорткоды Вукомерса.
      Как-то так)

      Ответить
    • @Финты WordPress Пичалька… Значит тогда пишу свой вывод в function.php. Собственно надо было неделю назад начать это реализовывать. Так нет-же. Не хватало авторитетного мнения и пинка под зад)
      Спасибо за отет.

      Ответить
  27. WooCommerce в архив товаров выводит заголовки товаров с тегом H2. В результате на страницах каталога, в виджетах товаров, на главной если выводим какие либо товары образуется большое количество заголовков h2.
    Как правильно переопределить вывод заголовков товаров чтобы вместо тега h2 выводился h3/h4/div или ничего

    Подскажите пожалуйста как изменить

    И зачем вообще они сделали вывод товаров в архив с заголовком H2?

    Ответить
  28. Здравствуйте, подскажите как фото карточки товара при выводе в категории разделить с его названием. Там одна ссылка на все. Заранее спасибо.

    Ответить
    • ​@@wpruse Чтобы было две одно на фото потом пробел и ссылка на названии. Просто хочу изменить вид фото отдельно от текста. Добавить небольшое приближение при наведении. Я так понимаю это уже в CSS надо делать. Сейчас пытаюсь разобраться как это сделать. Может у вас есть видео по работе с CSS с Woocommerce. Как изменять именно вид карточки в категории. Заранее спасибо. С хуками по вашему видео разобрался убрал все что не нужно)))

      Ответить
    • @@dzianisarkhireev9068 Ну Css он не зависит от Вукомерса, он как бы сам по себе, меняйте как надо

      Ответить
  29. Не знаю что сказать. Это просто топовые гайды. Спасибо большое!

    Ответить
  30. Артём, добрый день! Делаю как у вас, но у меня не выводиться артикуль… Нужно ли в обязательном порядке иметь шаблон у себя в теме? Может в этом дело?

    РЕШЕНИЕ: Сработало, когда я использовал хук: woocommerce_after_shop_loop_item

    Ответить
  31. Здравствуйте. А возможно в архив товаров добавить баннер на всю ширину после первой строчки карточек товаров, потом после 5 строки… И чтобы в Элементоре отображалось?

    Ответить
    • Доброго! Технически возможно, но Элементором не знаю как это сделать

      Ответить

Добавить комментарий

%d такие блоггеры, как: