Woocommerce 如果产品有加售,则在产品列表中显示徽章

Woocommerce if product has upsells show badge in product listing

我正在尝试在 Woocommerce 网站的产品列表中显示动态产品徽章。产品徽章应仅在产品分配有加售时显示。

我刚刚在单个产品页面上使用 content-single-product.php 文件中的这段代码取得了不错的效果:

<?php if ( isset( $product ) && is_product() ) {
    $upsells = version_compare( WC_VERSION, '3.0', '<' ) ? $product->get_upsells() : $product->get_upsell_ids();
    if ( count( $upsells ) > 0 ) { ?>
        <span class="more_variants">Finns i fler varianter</span>
<?php } } ?>

但是,由于没有为列表中的单个产品收集追加销售的产品数据,我尝试了另一种方法,将此代码实现为 functions.php:

add_action( 'woocommerce_before_shop_loop_item', 'related_upsell_products', 15 );

function related_upsell_products() {
    global $product;

    if ( isset( $product ) && is_product() ) {
        $upsells = version_compare( WC_VERSION, '3.0', '<' ) ? $product->get_upsells() : $product->get_upsell_ids();

        if ( count( $upsells ) > 0 ) {
            echo '<span class="more_variants">Finns i fler varianter</span>';
        }
    }
}

functions.php 中的代码既没有给我错误,也没有给我我想要的结果。它returns没什么。我的诚实想法是 global $product; 会为我提供获取信息所需的额外产品数据,如果特定产品是否分配了追加销售产品。

任何想法都非常欢迎!我已经搜索了论坛,并没有得到太多关于以这种方式使用 Woocommerce 处理加售的结果。可能是因为使用加售作为变体而不是可变产品并不是很常见..

当您说 “列表中的产品” 时,我假设您在 shop 页面上。如果是这样,那么您需要:

  • 将您的条件检查更改为 is_shop()
  • 在查看商店页面后,也请致电您的 global $product

所以你的整个代码应该是这样的:

add_action('woocommerce_before_shop_loop_item', 'related_upsell_products', 15);

function related_upsell_products()
{
    if (is_shop()) {
        global $product;

        $upsells = version_compare(WC_VERSION, '3.0', '<') ? $product->get_upsells() : $product->get_upsell_ids();

        if (count($upsells) > 0) {
            echo '<span class="more_variants">Finns i fler varianter</span>';
        }
    }
}

结果如下: