
Как вывести блок параметров лицензии товара в WooCommerce с помощью ACF и хуков

Ниже не обзор, а маршрут по админке: от создания полей до проверки карточки на странице товара. В примере используется WordPress, WooCommerce, ACF Pro, WPCodeBox 2 и тема Blocksy. Результат — информационная карточка перед формой покупки. Покупателю показываются только заполненные значения; условия лицензии нужно подтвердить для каждого товара отдельно.
Важно: на WordPressBook уже настроен рабочий вариант: shortcode , поля ACF для товара и блок Blocksy «Данные товара», размещённый перед формой покупки с приоритетом 25. В статье описаны именно эти части, а не выдуманные пункты меню плагина. WPCodeBox — место, где хранится PHP-сниппет; Blocksy Content Block — место, где задаётся позиция блока на странице товара.
Что подготовить до начала
- Войдите в админку WordPress под пользователем с правами администратора.
- Убедитесь, что активны WooCommerce, Advanced Custom Fields Pro (ACF Pro), WPCodeBox 2 и Blocksy Companion Pro.
- Перед правкой PHP-сниппета сделайте резервную копию сайта или хотя бы сохраните исходный текст сниппета отдельно. Ошибка в PHP может вызвать критическую ошибку сайта.
- Откройте в новой вкладке карточку тестового товара, например «ACF Pro». После настройки удобно сравнить её с исходным состоянием.
Шаг 1. Откройте ACF и создайте группу полей
- В боковом меню WordPress нажмите ACF (в некоторых версиях меню называется Пользовательские поля).
- Откройте Группы полей и нажмите Добавить новую.
- В заголовке группы укажите Данные лицензии товара.
- Не закрывая страницу, добавьте поля по таблице ниже. Для каждого нового поля нажимайте Добавить поле.
| Подпись поля | Имя поля (Field Name) | Тип | Что вводить в товаре |
|---|---|---|---|
| Тип лицензии | wb_license_type | Текст | Только подтверждённый тип лицензии |
| Количество сайтов | wb_license_sites | Текст | Например, «1 сайт», если это подтверждено |
| Срок действия | wb_license_period | Текст | Например, «Бессрочно (Lifetime)» только при подтверждении |
| Обновления | wb_license_updates | Текст | Укажите фактический способ и срок обновлений |
| Активация | wb_license_activation | Текст | Например, «Активация специалистом за 24 часа (обычно раньше, час-два)» |
Для каждого поля задайте понятную Подпись, затем заполните Имя поля латиницей точно как в таблице. Не вводите пробелы и не заменяйте подчёркивания. Это имя, а не текст, который увидит покупатель. Значения заполняются позже в карточке товара.
Шаг 2. Ограничьте группу только товарами
- Внизу экрана группы найдите раздел Правила показа / Location Rules.
- В первом списке выберите Тип записи (Post Type).
- Во втором списке выберите условие равно.
- В третьем списке выберите Товар (Product).
- Нажмите Сохранить изменения или Опубликовать вверху справа.
Если оставить группу без этого условия, поля могут появиться не там, где нужно. После сохранения откройте товар в админке и убедитесь, что панель ACF видна на странице редактирования товара.
Шаг 3. Найдите PHP-сниппет в WPCodeBox 2
- В левом меню админки откройте WPCodeBox. Если меню свёрнуто, сначала нажмите значок раскрытия меню.
- Откройте список локальных сниппетов. В поиске списка попробуйте найти
wb_license_card, «лицензия» илиget_field. - Откройте найденный PHP-сниппет. Перед сохранением проверьте, что это именно код карточки лицензии, а не другой сниппет.
- Если сниппет уже создан, найдите его в списке по названию. Если создаёте новый: нажмите кнопку создания сниппета, выберите тип PHP до сохранения и назовите, например, «Карточка лицензии товара». В редактор вставляется именно PHP-код, который регистрирует shortcode
wb_license_card, читает пять ACF-полей и формирует карточку. В WPCodeBox тип сниппета выбирается до сохранения, поэтому не сохраняйте его как CSS или JavaScript. Если такого сниппета нет, не активируйте случайный PHP-код: сначала добавьте проверенный код, протестируйте его на копии сайта или попросите разработчика. - Сохраните сниппет и включите его переключателем Enable/Активен. У включённого сниппета в списке не должно быть пометки «Disabled».
Как не перепутать место хука: сам PHP-сниппет должен быть запущен на фронтенде, где отображается товар, а блок должен быть выведен на странице отдельного товара WooCommerce. Название hook в этой настройке — woocommerce_single_product_summary, приоритет — 25. Не размещайте его в шапке сайта, в админке или в архиве магазина.
Если в вашей версии WPCodeBox нет отдельного поля «Hook», не ищите его наугад: хук может быть прописан внутри PHP-кода как add_action('woocommerce_single_product_summary', ... , 25). Настройки исполнения сниппета и хук WooCommerce — не одно и то же. У WPCodeBox есть свой экран редактора и параметров сниппета; официальная документация показывает расположение списка, редактора и настроек сниппета. Схема интерфейса WPCodeBox; настройки сниппета.
Шаг 4. Откройте блок размещения в Blocksy
- В меню WordPress откройте Внешний вид → Блоки содержимого (в некоторых версиях пункт может находиться в меню Blocksy).
- В списке найдите блок Данные товара и откройте его для редактирования. На WordPressBook это Blocksy Content Block с ID 1448.
- В содержимом блока должна находиться строка
. Вставьте shortcode через блок «Шорткод» редактора Gutenberg либо в текстовый блок. Не добавляйте квадратные скобки повторно и не обрамляйте shortcode обратными кавычками. - В панели настроек блока найдите раздел условий отображения / расположения. Выберите шаблон или условие для отдельного товара WooCommerce (Single Product).
- В параметре точки подключения выберите область сводки товара —
woocommerce_single_product_summary(или соответствующее ей название в интерфейсе Blocksy). - Установите приоритет 25, чтобы блок отображался перед стандартной формой покупки с приоритетом 30. Сохраните/обновите блок.
Названия контролов отличаются между версиями Blocksy. Ориентируйтесь на смысл настройки: тип страницы — отдельный товар; место — сводка товара; позиция — до формы покупки; приоритет — 25. Не выбирайте «Весь сайт».
Шаг 5. Заполните данные у одного тестового товара
- Откройте Товары → Все товары.
- Наведите курсор на тестовый товар и нажмите Изменить (не «Быстрое редактирование»).
- На странице редактирования прокрутите вниз до группы Данные лицензии товара.
- Заполните только те строки, условия которых подтверждены для этого товара. Не копируйте автоматически Lifetime, один сайт или сроки обновлений с другого продукта.
- Нажмите Обновить в правой колонке.
Шаг 6. Проверьте результат на витрине
- Откройте публичную страницу того же товара в новой вкладке.
- Обновите страницу. Если включён кэш, очистите кэш страницы в используемом плагине кэширования и обновите страницу ещё раз.
- Проверьте, что карточка находится перед количеством товара и кнопкой В корзину, а каждое значение совпадает с введённым в админке.
- Для проверки скрытия карточки временно удалите значения тестового товара, нажмите Обновить и откройте страницу снова. Пустая карточка не должна оставлять рамку или пустой отступ. Затем верните подтверждённые значения.
- Проверьте страницу на телефоне или в режиме мобильного просмотра браузера: длинные значения не должны перекрывать кнопку покупки.
Если что-то не отображается: проверка по порядку
- Нет полей в товаре: вернитесь в ACF и проверьте правило «Тип записи равно Товар», сохранение группы и точность имён полей.
- Поля заполнены, карточки нет: проверьте, что PHP-сниппет включён, shortcode написан точно как
, а блок Blocksy назначен для отдельного товара. - Карточка есть, но не перед кнопкой: проверьте точку подключения
woocommerce_single_product_summaryи приоритет 25. Если на странице два блока, отключите дублирующее размещение. - Изменения не видны: очистите кэш страницы и проверьте страницу в приватном окне браузера.
- После сохранения появилась критическая ошибка: не редактируйте сайт дальше. Отключите последний изменённый сниппет через безопасный режим WPCodeBox или восстановите резервную копию; при отсутствии доступа обратитесь к разработчику/хостингу.
- Показываются неверные сведения: это не ошибка отображения. Исправьте поле в карточке товара и публикуйте только условия, подтверждённые для конкретного продукта.
Итог
Порядок настройки такой: создать ACF-группу и пять полей → показывать группу только у товаров → включить PHP-сниппет, который обрабатывает → поместить shortcode в Blocksy Content Block → назначить блоку отдельный товар и точку подключения с приоритетом 25 → заполнить подтверждённые данные и проверить публичную страницу. Так проще найти, на каком именно шаге возникла проблема.

