В woocommerce я создаю веб-сайт, на котором продаются старинные карты. Мне нужно найти способ передать идентификатор продукта и идентификатор варианта из магазина woocommerce на страницу отдельного продукта для двух отдельных вариантов с помощью кнопок без добавления продукта в корзину.
Существует два типа продуктов: оригинальная карта (из которых, очевидно, только один) и бесконечные цифровые отпечатки.
Я разделил их, создав переменный продукт с атрибутами «оригинал» и «цифровые отпечатки». есть один вариант для каждого атрибута, так что многое довольно просто.
Компания хочет, чтобы эти две опции («оригинал» и «цифровая печать») отображались на главной странице магазина woocommerce в виде кнопок.
Идея состоит в том, что кнопка «оригинал» появится только в том случае, если оригинал есть в наличии (опять же, просто достичь).
Проблемы начинаются здесь:
Идея состоит в том, что при нажатии любой из этих кнопок продукт не будет добавлен в корзину, а перейдет на соответствующую страницу отдельного продукта, и там, в зависимости от типа варианта, появится ряд вариантов для выберите, будет ли карта оформлена и смонтирована, если она цифровая, насколько большим должен быть отпечаток и т. д. и т. д. После выбора продукт можно добавить в корзину с помощью кнопки «Добавить в корзину» на странице одного продукта.
То, что я сейчас не могу сделать, это отправить информацию на страницу отдельного продукта, не добавляя ее в корзину (!)
Код, который я сейчас использую, использует woocommerce_after_shop_loop_item и woocommerce_single_variation, чтобы перезаписать кнопку добавления в корзину по умолчанию и заменить ее на следующую, но, очевидно, это все еще добавляет продукт в корзину. Глядя на код, он многословен и, очевидно, слишком сложен, но я в тупике. Кнопка «Добавить в корзину» должна быть заменена чем-то, что просто перемещается на страницу отдельного продукта и содержит идентификатор продукта и идентификатор варианта, но я не знаю, что. Теоретически вы можете сериализовать его в массив и отправить как $ _GET, привязанный к якору, но кроме потенциальных проблем с безопасностью, которые это может вызвать, на панели инструментов это выглядит некачественно.
Итак, в заключение. Мне нужно найти способ передать идентификатор продукта и идентификатор варианта из магазина woocommerce на страницу отдельного продукта для двух отдельных вариантов, используя кнопки без добавления продукта в корзину. Есть идеи?
код ниже:
function mc_loop_variation_add_to_cart_button() {
global $product;
$product_obj = new WC_Product_Factory();
$product = $product_obj->get_product($product);
if ($product->product_type == 'variable'):
$children = $product->get_children( $args = '', $output = OBJECT );
foreach ($children as $key=>$value) {
$product_variatons = new WC_Product_Variation($value);
if ( $product_variatons->exists() && $product_variatons->variation_is_visible() ) {
$variations[$value] = $product_variatons->get_variation_attributes();
foreach ($variations[$value] as $key=>$value) {
$stock = $product_variatons->get_stock_quantity();
$product_price = $product_variatons->regular_price;
if($value=="original") {
if($stock > 0) {
echo "Price: £" . $product_price;
?>
<div class="woocommerce-variation-add-to-cart variations_button">
<?php
?>
<button type="submit" class="single_add_to_cart_button button">Buy <?php //echo $value; ?></button>
<input type="hidden" name="add-to-cart" value="<?php echo absint( $product->get_id() ); ?>" />
<input type="hidden" name="product_id" value="<?php echo absint( $product->get_id() ); ?>" />
<input type="hidden" name="variation_id" class="variation_id" value="<?php echo $value; ?>" />
</div>
<?php
} else {
echo "";
}
} else {
echo "Price: £" . $product_price;
?>
<div class="woocommerce-variation-add-to-cart variations_button">
<button type="submit" class="single_add_to_cart_button button">Buy <?php echo $value; ?></button>
<input type="hidden" name="add-to-cart" value="<?php echo absint( $product->get_id() ); ?>" />
<input type="hidden" name="product_id" value="<?php echo absint( $product->get_id() ); ?>" />
<input type="hidden" name="variation_id" class="variation_id" value="<?php echo $value; ?>" />
</div>
<?php
}
?>
<?php
}
}
}
endif;
}