将自定义徽章应用于存档循环项目 WooCommerce 上的特定产品 ID

Apply custom badge to specific product id on archive loop item WooCommerce

我正在尝试为商店页面或类别存档中的特定产品或显示此特定产品循环项目时显示带有文本“独家”的徽章。

然而我已经尝试 add_action before_shop_loop_item 但问题是 $product 变量不包含该对象。我正在考虑 $product->get_id(),如果它与产品 ID 匹配,则将一些 HTML 应用于该特定产品循环项目。

add_action('woocommerce_before_shop_loop_item', 'add_custom_badge', 1);

function add_custom_badge( $product ) {
    if ( $product->get_id() === 123 ) {
        echo '<script>console.log("add_custom_badge")</script>';
    }
} 

BTW get_id() 无法执行,因为 $product 看起来像空的。这就是我堆叠的地方。

是的,我要打印 HTML 的位置是 woocommerce_before_shop_loop_item - 就在销售徽章之前。

关于如何过滤循环项目有什么建议吗?

$product默认不传给回调函数,在woocommerce_before_shop_loop_item钩子处。这就是它不起作用的原因

改用global $product

所以你得到:

function action_woocommerce_before_shop_loop_item() {
    global $product;

    // Is a WC product
    if ( is_a( $product, 'WC_Product' ) ) {
        if ( $product->get_id() == 123 ) {
            echo '<script>console.log("add_custom_badge")</script>';
        }
    }
}
add_action( 'woocommerce_before_shop_loop_item', 'action_woocommerce_before_shop_loop_item', 10 );