Как вывести атрибуты товара в меню?
Можно ли вывести атрибуты товара в меню?
Чтобы отсюда можно было добавлять
Дополнительно
Ответы:
Можно, но не совсем так. Буквально в прошлом месяце об этом задумался, и нашел уже готовую реализацию
Bulk menu creator
В видео прям на этом кадре видно как это делается.
А еще понравилось, что можно get в ссылки ставить и не надо шаманить
- Спасибо за вариант, но как я понял это будет генерация произвольных ссылок. Сильно не облегчит, тк их всё равно нужно копипастить (ссылки на страницы атрибута).
- Refguser, не уверен. Сам я пока не пробовал платную версию, но как мне показалось - выбирается таксономия и всё. все значения с ссылками проставляются. Наверняка должны быть включены архивы для этой таксономии. А еще там можно указать ID исключенных терминов. Так что ссылку в ручную прописывать не нужно. тут лучше у автора уточнить.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Да, атрибуты товара WooCommerce можно вывести в меню, но важно понимать, что атрибуты товаров являются таксономиями. Например атрибут Цвет обычно имеет таксономию pa_color, Размер может быть pa_size или pa_razmer, Бренд часто pa_brand. Значения атрибута, такие как красный, XL или Nike, являются терминами этой таксономии. Поэтому в меню нужно выводить не сами товары, а ссылки на архивы терминов атрибута или на фильтр каталога.
Если задача разовая и значений мало, самый простой вариант — включить архивы для нужного атрибута в WooCommerce, взять ссылки терминов и добавить их в меню как произвольные ссылки. Это не требует кода и полностью управляется из админки. Минус в том, что при добавлении новых значений атрибута меню придется обновлять вручную. Если значений много или они часто меняются, лучше выводить их программно.
Пример ниже добавляет термины атрибута pa_brand в конкретную область меню. Замените primary на вашу theme_location и pa_brand на нужный атрибут.
add_filter('wp_nav_menu_items', function ($items, $args) { if (($args->theme_location ?? '') !== 'primary') { return $items; } $terms = get_transient('menu_pa_brand_terms'); if ($terms === false) { $terms = get_terms([ 'taxonomy' => 'pa_brand', 'hide_empty' => true, 'orderby' => 'name', 'order' => 'ASC', ]); set_transient('menu_pa_brand_terms', $terms, HOUR_IN_SECONDS); } if (is_wp_error($terms) || empty($terms)) { return $items; } foreach ($terms as $term) { $url = get_term_link($term); if (is_wp_error($url)) { continue; } $items .= sprintf( '<li class="menu-item"><a href="%s">%s</a></li>', esc_url($url), esc_html($term->name) ); } return $items; }, 10, 2);
Такой код лучше размещать в дочерней теме или в небольшом плагине, если меню относится к логике магазина, а не только к внешнему виду. Кэш через transient нужен, чтобы не дергать get_terms на каждой загрузке страницы без необходимости. Если вы изменили атрибуты и меню не обновилось сразу, очистите transient или дождитесь истечения времени кэша.
Главный принцип: не копировать вручную то, что должно обновляться автоматически, но и не нагружать каждую страницу тяжелым запросом. Для нескольких статичных пунктов достаточно ручного меню. Для десятков терминов, которые меняются вместе с каталогом, оправдан программный вывод с кэшированием и привязкой к конкретной области меню.