【发布时间】:2019-04-19 13:47:55
【问题描述】:
在 woocommerce 中,我正在建立一个销售复古地图的网站。我需要找到一种方法,使用按钮将产品 ID 和变体 ID 从 woocommerce 商店传递到单个产品页面,以获得两个单独的变体,而无需将产品添加到购物车。
有两种产品类型,原始地图(显然只有一种)和无限的数字打印。
我通过创建具有“原始”和“数字印刷”属性的可变产品来区分这些。每个属性都有一个变化,所以很简单。
公司希望这两个选项(“原始”和“数字印刷”)作为按钮出现在 woocommerce 商店首页。
这个想法是,“原版”按钮只有在原版有库存时才会出现(同样,实现起来很简单)。
问题从这里开始:
这个想法是,当按下这些按钮中的任何一个时,它不会将产品添加到购物车,而是会转到相应的单个产品页面,在那里,根据变体类型,将有一系列选项选择地图是否加框和安装,如果是数字的,打印应该有多大等等等等。选择后,可以使用单个产品页面上的添加到购物车按钮将产品添加到购物车。
目前我似乎无法将信息发送到单个产品页面而不将其添加到购物车(!)
我当前使用的代码使用 woocommerce_after_shop_loop_item 和 woocommerce_single_variation 来覆盖默认的添加到购物车按钮并将其替换为以下内容,但显然这仍然是将产品添加到购物车。查看代码,它很冗长,而且显然过于复杂,但我很难过。添加到购物车按钮需要替换为简单地移动到单个产品页面并使用产品 ID 和变体 ID 的东西,但我不知道是什么。从理论上讲,您可以将它序列化为一个数组并作为附加到锚点的 $_GET 发送,但除了这可能导致的潜在安全问题之外,它在工具栏中看起来很劣质。
所以,总而言之。我需要找到一种方法,使用按钮将产品 id 和变体 id 从 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;
}
【问题讨论】:
标签: php wordpress woocommerce custom-taxonomy variations