Как сделать простой товар, но с некоторыми возможностями вариативного?
Уважаемые коллеги, спасайте, всю голову уже сломал. Небольшое вступление: сейчас разрабатываю сайт на Woocommerce, одним из требований СЕОшника было формирование у каждого товара уникального урл, но, вместе с тем, каждый товар имеет несколько разновидностей (размер, цвет). И заказчик хочет чтобы каждая вариация показывалась отдельно!
Вариативные товары вроде не очень подходят (в каталоге показывается один товар для всех вариаций, вариации не имеют нормального урл, вобщем не то).
Пробовал вариации вариативных товаров эмулировать в простые плагином WooCommerce Show Single Variations от iconic. Немного не то, правил, правил, допиливал - плюнул (конфликтует с самописной функцией, которая меняет цену товара в зависимости от курса валют, и другие ньюансы тоже есть - вообщем не подходит). Остался вариант формировать все вариации просто как обычные простые товары (копирайтеры замучаются описание ко всем писать, это да). Теперь собственно вопрос:
Как в карточке товара(простого) вывести варианты цветов и размеров, например под ценой, с возможностью выбора (желательно без перезагрузки страницы) и после выбора всех параметров отправить на необходимую страницу товара?
По идее - размер и цвет можно сделать атрибутами товара, как вывести атрибуты в любом месте карточки товара в зависимости от категории я в теории знаю. А вот что дальше? При выборе клиентом, например, другого цвета товара? Отправлять его редиректом на другую страницу? А если и размер захотелось другой? Снова редирект?
P.S. Извините за длиннопост, старался более подробно объяснить) Заранее спасибо всем за подсказки!
Вот здесь (см. в комментариях) описывался подобный вариант с рабочим примером плагина. Вам нужно только подправить функцию вывода под свою выборку (т.е. под таксономию или метаполе). В плагине выборка осуществляется по определенному содержимому метаполя. Правда без ajax-а, руки не дошли.
Пычев Анатолий, остановился на вариативных товарах, так какв случае простых возникает офигенное множество вариантов товара)) И в итоге на странице около 20-30 вариантов одного товара, что вообще не вариант) Использовал ваш плагин для вариативных товаров, только сделал в самом плагине проверку на наличие товара и вывод только для вариативных товаров (на простых его не вывожу)
Я тоже его использовал для вариативных, только цвет у нас не заведен в атрибут вариации а выделен как отдельный товар. В результате получается, что вариации всегда только по одному атрибуту (размер например). Это позволило сделать более легкое табличное представление для оптовых заказов.
Огромное спасибо за ваш плагин! Только ньюанс возник))) У клиента странная база данных товаров (И у одинаковых товаров с разными цветами - очень разные артикулы, вообщем отсортировать по первым цифрам не выйдет). Артикулы клиент менять не хочет (товары идут с артикулами поставщика). Решил проблему с помощью кастомных полей и вашего плагина, немного его переработав:
1) Создал кастомное поле newsku;
2) Вывел его в админке (на фронте назвал "Код товара");
3) Переработал ваш плагин, сделав сортировку по тому же массиву, но по другому ключу.
Код переделки, может кому пригодится
Условие 'bndl' == substr( $newsku, 0, 4 ) можете смело удалить. Это была проверка на принадлежность в артикулу комплекта. У Вас скорее всего нет таких артикулов.
Спасибо!Этот момент я тоже механически скопировал, по принципу- работает, не трогай))
А подскажите, пожалуйста, такой момент по вашему коду:
- Как я понял, вы здесь сначала получили массив продуктов, потом установили для них нулевую рамку. Затем вы прописали условие о том, что если элемент не принадлежит массиву (который вызывается get_sku()) то он имеет другую рамку?
У меня массив новых артикулов находится через
$test = get_post_meta( $post->ID, '_newsku', true ); т.е я , по сути, прохожу по post_meta товаров с ключом _newsku, получая то что мне нужно... Все вроде работает, но!
Когда я пробую по условию отсортировать
if ( $newsku == $prd->$test ) { $imgcss = 'border: 1px solid black;'; } , то рамку оно не дает)
Я в php не сильно специалист, подскажите куда можно копать? Как я понимаю, надо как-то сравнить, имеет ли данная миниатюра товара новый артикул точно совпадающий с артикулом текущего товара...Если да - то показывать рамку, если есть хоть какое-то отличие - то нет...Но как их сравнить???
Вообще запись $prd->$test странная. Что она должна у Вас возвращать? Судя по всему у Вас сыпятся Варнинги но Вы их невидите, т.к. по умолчанию у WordPress режим отладки отключен.
Мой алгоритм делал следующие, конечно он не идеален.
Получал все похожие записи
Пробегал в цикле каждую запись
Выделял код цвета из артикула $color = substr($prd->get_sku(), 8, 4)
Устанавливал значение стиля рамки по умолчанию$imgcss = 'border: 0px solid black;';, невидимой
Проверял, Если артикул совпадал с артикулом текущего товара, то устанавливал стиль рамки видимой
Если я Вас правильно понял, то Вы добавили новое произвольное поле и записываете туда артикула, которые сами создаете по какому-то правилу.
Для выделения рамкой, Вам нужно сравнивать артикул текущего товара (того, в карточке которого вы сейчас находитесь) с артикулом в цикле. Для этого, перед сравнением, Вам надо получить артикул товара который в цикле.
Спасибо вам огромное! Все заработало! Все таки недостаток знаний дает о себе знать(((
Разобрался...Оказывается, я с какого-то перепугу пытался пройти по $post, хотя непосредственно обращался к $clrpost. И потом еще с этими сравнениями...Вы в своем примере обращались к функции get_sku() для получения артикулов, и я самонадеянно подумал, что могу так же обратится к $test, в которую я вывел значения артикулов из нового кастомного поля ...Спасибо вам за подсказку!Теперь все отлично работает!
Спасибо за ваше решение, но я пробовал этот плагин. К сожалению здесь возникли свои ньюансы:
1) На странице каталога кроме дочерних вариаций показывается и товар-родитель (если его так можно назвать). В принципе решаемо, но опять же костыли.
2) Ньюансы пакетного редактирования вариаций. Очень неудобно массово редактировать товары где есть подобные вариации. Использовал Advanced Bulk Edit. С простыми товарами проблем нет.
3) УРЛ формируется вида - урл родительского товара+ get запрос, типа https://site/shina28/?attribute_pa_diametr=30&attr... Можно заморочиться rewrite rule, но опять же костыли(((
4) Нормально не работает функция по замене цены согласно курса валют (но, это уже,видимо, мои баги, и все равно писать костыли).
Так что с этим плагином не вариант, к сожалению(((