Используйте другой продукт в качестве опции - WooCommerce - PullRequest
2 голосов
/ 23 апреля 2019

Прежде чем я зайду слишком далеко в эту кроличью нору ...

У меня есть продукт в категории, которая по сути является выбором из 4 других продуктов.Это может быть любая комбинация избранных продуктов.Цены основаны на обычной цене на эти продукты.

То, что я до сих пор управлял

Управляется через обычный интерфейс атрибутов WooCommerce.Администратор вставляет атрибут use-for-custom со значением, являющимся категорией элемента, т.е. cupcakes

Результатом является ассоциация с продуктом, помеченным custom-assortment в категории cupcakes.Этот продукт будет доступен для любого / всех 4 вариантов продукта custom-assortment в категории cupcakes.

У меня также есть функция в functions.php, которая запрашивает все продукты с этим атрибутом набора и создает аккуратный маленький массив id / title / cost.Мне удалось это через этот пост ранее, плюс

$useable = array();
foreach ($products as $product){
    $useable[] = array(
        'id' => $product->ID,
        'name' => $product->post_title,
        'desc' => $product->post_excerpt,
        'cost' => floatval(wc_get_product($product->ID)->get_price())/4
        //cost is 1/4 as 4 will be selected to create 1 new product
    );
}

Примечания

Это не должно фактически связывать выбор обратно с конкретнымтовар.Отображение названий выбранных товаров в окончательном порядке достаточно для администратора.Однако было бы неплохо сохранить эту ссылку, так как это может привести к дополнительным функциям позже.

Не касается запасов на данный момент или каких-либо других атрибутов выбранных продуктов, кроме цены.

Мысли

Я немного пытался получить пользовательские варианты для программного создания с помощью этого поста от LoicTheAztec, но пока у меня нетзаставил их появиться.Я мог бы немного больше ткнуть, потому что его вещи обычно точные.

foreach ($useable as $useit){
    $display = $useit['name'] . " (" . $useit['cost'] . ")";
    $variation_data =  array(
        'attributes' => array(
            'flavor-one'  => $display,
            'flavor-two'  => $display,
            'flavor-three'  => $display,
            'flavor-four'  => $display
        ),
        'sku'           => '',
        'regular_price' => $useit['cost'],
        'sale_price'    => ''
    );
    var_dump($product->get_id());
    create_product_variation($product->get_id(), $variation_data);          
}

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

Последний вопрос

Есть ли способ использовать один продукт в качестве переменнойатрибут продукта для другого продукта уже?Это не похоже на что-то надуманное, но я не смог ничего гуглить.Мой гугл-фу не был отличным в последнее время.

1 Ответ

1 голос
/ 25 апреля 2019

Предполагая, что один продукт может быть любой комбинацией из 4 из 10 других продуктов, использование вариаций означает добавление 10000 возможных продуктов.Это кажется неразумным, поэтому я решил сделать это по-другому.

В ближайшее время этот ответ расширится кодом, но в основном:

Запрос сообщений для получения сообщений типа продукта с пользовательским атрибутомсгруппировать его с помощью этой настраиваемой опции.Выведите их как элементы select с вариантами элементов в форме добавления в корзину.Значения параметров в виде идентификаторов продуктов отображаются в виде имени продукта + цены для этого параметра.

Подключитесь к действию добавления в корзину, чтобы проверить параметры (переданные в $ _POST) и сохранить их в качестве атрибутов на элементе корзины.

Подключитесь к ценовому фильтру корзины и используйте атрибуты позиции корзины для расчета конечной цены продукта на основе исходных цен ассортимента.

Также:

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