【发布时间】:2021-05-30 19:49:45
【问题描述】:
我想在 Wp/Woocommerce /shop/ 页面上显示所有产品及其变体。 (/woocommerce/archive-product.php)。我在下面描述的过程是我试图让它发挥作用的尝试。欢迎使用替代品。
规范是什么: 产品 A 和产品 B 在网站上展示。产品 A 有“广告到购物车”按钮。产品 B 有“选择选项”按钮。
我的目标:产品 A 是“简单”产品,并显示在商店页面上 产品 B 是“可变”产品,有 2 种组合(黑色/蓝色)。添加到购物车按钮将此变体添加到购物车
我想在商店页面上显示 3 个产品,分别是 1* 产品 A 和 2* 产品 B。
到目前为止,如果产品是可变的,我已经提取了有关此产品变体的一些基本细节,但我似乎找不到缩略图?
$postId = get_the_ID();
$args = array(
'post_type' => 'product_variation',
'post_status' => array( 'private', 'publish' ),
'numberposts' => -1,
'orderby' => 'menu_order',
'order' => 'asc',
'post_parent' => $postId
);
$variations = get_posts( $args );
//var_dump($variations);
//$p = get_post_meta($postId, '_product_attributes', true); // return pa_flavor
//var_dump($p);
if(!empty($variations)) {
foreach ($variations as $variation) {
$vari = new WC_Product_Variation($variation->ID);
$availableAttr = $vari->get_attribute('Flavour');
$flavour = get_post_meta($variation->ID, 'attribute_pa_flavour', true);
因此,我可以获得“风味”的属性,并正在寻找为每个变体定义的缩略图...?任何帮助/指向可以这样做的地方都将不胜感激。
另外 [可能是我对 Wordpress 缺乏了解] 我似乎无法在 wc_get_template() 中传递/访问变量。这可能是次要问题,但仍然与在一个页面上显示单一产品和变体产品的基本问题有关。
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price_variation', 10 );
if ( ! function_exists( 'woocommerce_template_loop_price_variation' ) ) {
function woocommerce_template_loop_price_variation($prodVar=array()) {
if(empty($prodVar) || $prodVar['product_type'] == 'simple') {
wc_get_template( 'loop/price.php' );
} else {
wc_get_template( 'loop/price-variation.php' , $prodVar );
}
}
}
在 /price-variation.php 中(price.php woocommerce 基地的副本)
global $product;
var_dump($prodVar); // PRODUCED NOTICE to undefined variable???
<?php if ( $price_html = $product->get_price_html() ) : ?>
<span class="price"><?php echo $price_html; ?></span>
<?php endif; ?>
我不希望它是全球性的......?还是这是唯一的方法?
任何帮助或建议表示赞赏。
【问题讨论】:
-
$variation->get_image()应该得到一个变体对象的缩略图。另外,我认为您可以将new WC_Product_Variation更改为wc_get_product()。 -
我实际上一直在考虑构建一个插件来执行此操作,但我对多个属性会发生什么有些困惑。例如:如果 Black Large 和 Black Small 具有相同的缩略图,则不希望显示它们。好奇您是否对如何选择要添加到循环中的变体有任何想法?它如何对您最有效?
-
感谢 Helgatheviking。在这个阶段我没有考虑更多,因为我们已经走了另一条路。最终我想重新审视这个,一个插件会很棒。感谢您的回复。
-
我可能会在有时间的时候继续修改它,但目前看来必须进行一些复杂的自定义查询。
标签: php wordpress woocommerce product