Как вывести атрибуты товара в меню?

Ссылка скопирована
1 ответ

Можно ли вывести атрибуты товара в меню?

Чтобы отсюда можно было добавлять

Как вывести атрибуты товара в меню?

Дополнительно

Ответы:

Можно, но не совсем так. Буквально в прошлом месяце об этом задумался, и нашел уже готовую реализацию
Bulk menu creator
В видео прям на этом кадре видно как это делается.
А еще понравилось, что можно get в ссылки ставить и не надо шаманить

  • Спасибо за вариант, но как я понял это будет генерация произвольных ссылок. Сильно не облегчит, тк их всё равно нужно копипастить (ссылки на страницы атрибута).
  • Refguser, не уверен. Сам я пока не пробовал платную версию, но как мне показалось - выбирается таксономия и всё. все значения с ссылками проставляются. Наверняка должны быть включены архивы для этой таксономии. А еще там можно указать ID исключенных терминов. Так что ссылку в ручную прописывать не нужно. тут лучше у автора уточнить.

    Как вывести атрибуты товара в меню?

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Мария Код Ответ

Да, атрибуты товара 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);

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 или дождитесь истечения времени кэша.

  • Для вывода размеров используйте taxonomy вашего атрибута, например pa_size или pa_razmer.
  • Если архивы атрибута отключены, ссылка термина может быть не тем URL, который вы ожидаете; тогда лучше строить ссылку на каталог с параметром фильтра.
  • Если нужно управлять пунктами визуально из админки, используйте произвольные ссылки или специализированный инструмент массового создания пунктов меню.
  • Если меню большое, лучше делать отдельный блок мегаменю, а не добавлять десятки пунктов в обычный список.

Главный принцип: не копировать вручную то, что должно обновляться автоматически, но и не нагружать каждую страницу тяжелым запросом. Для нескольких статичных пунктов достаточно ручного меню. Для десятков терминов, которые меняются вместе с каталогом, оправдан программный вывод с кэшированием и привязкой к конкретной области меню.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно