WooCommerce 产品价格可见性:仅为特定类别添加价格

WooCommerce product price visibility: add price back only for a specific category

我正在使用的网站要求您登录才能查看价格,我一直在使用插件来执行此操作。然而,我刚被抛出一个曲线球,告诉我网站上的一个特定类别必须一直显示价格,无论用户是否登录。

看起来插件使用了

remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 10);

remove_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10);

删除价格。这就是我尝试为特定类别的产品重新添加价格的方式:

function make_surplus_price_always_visible(){

    global $post;
    $terms = wp_get_post_terms( $post->ID, 'product_cat' );
    foreach ( $terms as $term ) $categories[] = $term->slug;

    if ( in_array( 'surplus-allison-parts', $categories ) && !is_user_logged_in()) {
        ?>
            <script>
            alert('product in surplus');
            </script>
        <?php

        //add_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 10);
        add_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10);

    }

}
add_action('woocommerce_after_shop_loop_item_title', 'make_surplus_price_always_visible', 50);

但它不会加回价格。 jQuery 警报正在运行,因此这与满足 "if" 声明要求无关。

我怎样才能加回特定类别的产品价格?

已更新:这是使其工作的正确方法:

  • 使用 has_term() 产品类别的 Wordpress 功能更好更短。
  • 删除了您的 javascript 消息 (那是为了测试目的)
  • 挂钩优先级需要刚好在 10(价格挂钩优先级)之前才能工作。

代码:

add_action('woocommerce_after_shop_loop_item_title', 'shop_loop_make_surplus_price_always_visible', 8 );
function shop_loop_make_surplus_price_always_visible(){
    global $post;

    // Set here your product categories (Names, slugs or IDs) in this array
    $categories = array( 'surplus-allison-parts' );

    if ( has_term( $categories, 'product_cat', $post->ID ) && ! is_user_logged_in()) {
        add_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10);
    }
}

并且:

add_action('woocommerce_single_product_summary', 'single_product_make_surplus_price_always_visible', 8 );
function single_product_make_surplus_price_always_visible(){
    global $post;

    // Set here your product categories (Names, slugs or IDs) in this array
    $categories = array( 'surplus-allison-parts' );

    if ( has_term( $categories, 'product_cat', $post->ID ) && ! is_user_logged_in()) {
        add_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 10);
    }
}

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。

已测试并有效