как получить variation_id выбранного варианта

Вопрос или проблема

Я создал кастомную кнопку добавления в корзину для WordPress, но она не работает для переменных товаров, например, для товара красного цвета и с памятью 128 ГБ используется отдельный ID. Как мне получить этот ID?

Я получаю переменные с помощью следующих кодов, и пользователь делает свой выбор

<?php $variations = $product->get_variation_attributes();
                    $available_variations = $product->get_available_variations();
                   
                    ?>
                    <?php foreach ($variations as $key => $value): ?>
                        <div class="d-flex">
                            <div class="ms-2">
                                <span><?php echo $key; ?></span>
                            </div>
                            <div class="d-flex">
                                <?php foreach ($value as $var): ?>

                                    <div class="button-group">
                                        <input type="radio" name="<?php echo $key ?>" value="<?php echo $var; ?>" id="<?php echo $var; ?>">
                                        <label class="artheme_var_id" name="<?php echo $key ?>" id="<?php echo $var; ?>" for="<?php echo $var; ?>"><?php echo $var; ?></label>
                                    </div>
                                <?php endforeach;  ?>
                            </div>
                        </div>
                        <br>
                    <?php endforeach; ?>

Мне нужна помощь, чтобы найти ID выбранной переменной

Ответ или решение

Чтобы получить идентификатор выбранной вариации для переменных продуктов в WooCommerce, необходимо учитывать, какие атрибуты были выбраны пользователем. Давайте разберем это по шагам.

Шаг 1: Получение атрибутов вариаций

Вы уже используете метод $product->get_variation_attributes(), чтобы получить атрибуты вариаций, и $product->get_available_variations(), чтобы получить доступные вариации. Мы будем использовать эту информацию, чтобы сопоставить выбранные пользователем значения с идентификатором вариации.

Шаг 2: Сбор выбранных значений атрибутов

Вы должны создать форму, которая будет отправлять выбранные значения атрибутов при нажатии на кнопку «Добавить в корзину». Вот пример:

<form method="POST" id="custom_add_to_cart_form">
    <?php foreach ($variations as $key => $value): ?>
        <div class="d-flex">
            <div class="ms-2">
                <span><?php echo $key; ?></span>
            </div>
            <div class="d-flex">
                <?php foreach ($value as $var): ?>
                    <div class="button-group">
                        <input type="radio" name="<?php echo $key; ?>" value="<?php echo $var; ?>" id="<?php echo $var; ?>">
                        <label class="artheme_var_id" for="<?php echo $var; ?>"><?php echo $var; ?></label>
                    </div>
                <?php endforeach; ?>
            </div>
        </div>
        <br>
    <?php endforeach; ?>
    <button type="submit">Добавить в корзину</button>
</form>

Шаг 3: Получение идентификатора вариации

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

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Получаем выбранные атрибуты из формы
    $selected_attributes = [];

    foreach ($variations as $key => $value) {
        if (isset($_POST[$key])) {
            $selected_attributes[$key] = $_POST[$key];
        }
    }

    // Ищем вариацию с выбранными атрибутами
    foreach ($available_variations as $variation) {
        $variation_attributes = $variation['attributes'];

        // Проверяем соответствие
        $match = true;
        foreach ($selected_attributes as $key => $selected_value) {
            if ($variation_attributes[$key] !== $selected_value) {
                $match = false;
                break;
            }
        }

        if ($match) {
            $variation_id = $variation['variation_id'];
            break; // Идентификатор найден, можем выйти из цикла
        }
    }

    if (isset($variation_id)) {
        echo 'Идентификатор выбранной вариации: ' . $variation_id;
    } else {
        echo 'Вариация не найдена.';
    }
}

Объяснение

  1. Форма: Мы настроили форму для отправки выбранных значений атрибутов. Каждый набор атрибутов передается по атрибуту name.

  2. Обработка данных: После отправки формы мы проверяем, какие атрибуты были выбраны, и создаем их ассоциативный массив.

  3. Сопоставление: Затем мы проходим через доступные вариации и сравниваем их атрибуты с выбранными значениями. Если находите совпадение, записываем variation_id.

  4. Вывод: В конце выводим найденный идентификатор вариации или сообщение о том, что вариация не найдена.

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

Оцените материал
Добавить комментарий

Капча загружается...