隐藏WooCommerce中特定类别的价格,并且仅隐藏要从该类别购买的特定用户角色

嗨,有人可以带领我朝正确的方向前进。这就是我要在WooCommerce商店中实现的目标。我有一家商店,该商店的类别可供普通大众使用,但是其中一个类别是特殊类别,需要获得批准才能购买,因此我想为此类别创建特定的用户角色。

我已经能够获得一个类别的隐藏价格,但似乎无法找出如何限制对该类别的购买并将价格显示给特定的用户角色。

例如

除非登录了用户角色“样本类别客户” ,否则父类别样本类别及其所有子类别都将具有隐藏的价格。它将显示文本“注册价格”

只有用户角色样本类别客户可以从样本类别及其子类别中购买商品。任何其他用户角色都将被禁止从该类别中购买商品,但这些商品仍将以隐藏的价格显示给他们。

样本类别用户可以在任何地方购买

所有其他类别的所有用户角色都有可见的价格。所有类别,包括样品类别(将会隐藏价格),所有人都可以看到

感谢您的帮助

Vanessa

huayuan1005 回答:隐藏WooCommerce中特定类别的价格,并且仅隐藏要从该类别购买的特定用户角色

下面,我修改了我先前为批发客户编写的一些代码。该代码删除了价格和“添加到购物车”按钮,并完全阻止了这些产品的购买。

add_action( 'template_redirect','hide_price_and_add_cart' );
// The first hook that is safe to get post id is template_redirect

function hide_price_and_add_cart() {

    $postID = get_queried_object_id();

    if ( ( is_product( $postID ) && has_term( 'sample_category','product_cat' ) ) ||
         // if single product pages in the category "sample_category"
         ( is_product_category( 'sample_category' ) )
         // or,if product category pages "sample_category"
    ) {

        if ( is_user_logged_in() ) {

            $user = wp_get_current_user();

            if ( ! in_array( 'sample_category_customer',(array) $user->roles ) ) {

                remove_action( 'woocommerce_after_shop_loop_item','woocommerce_template_loop_add_to_cart',10 );
                // remove 'Add to Cart' from product category page
                remove_action( 'woocommerce_single_product_summary','woocommerce_template_single_add_to_cart',30 );
                // remove 'Add to Cart' from single product page
                remove_action( 'woocommerce_after_shop_loop_item_title','woocommerce_template_loop_price',10 );
                // remove price from product category page
                remove_action( 'woocommerce_single_product_summary','woocommerce_template_single_price',10 );
                // remove price from single product page

                add_action( 'woocommerce_single_product_summary','print_login_to_access',31 );
                // Print 'Register for price' on single product page 
                add_action( 'woocommerce_after_shop_loop_item',11 );
                // Print 'Register for price' on product category page 
                add_filter( 'woocommerce_is_purchasable','__return_false');
                // Finally,let's just make sure the product cannot be purchased...

            }
        } else {

            // If user is not logged in,hide everything as well

            remove_action( 'woocommerce_after_shop_loop_item',10 );
            remove_action( 'woocommerce_single_product_summary',30 );
            remove_action( 'woocommerce_after_shop_loop_item_title',10 );

            add_action( 'woocommerce_single_product_summary',31 );
            add_action( 'woocommerce_after_shop_loop_item',11 );
            add_filter( 'woocommerce_is_purchasable','__return_false');
        }
    }
}

function print_login_to_access() {
    echo '<p>Register for price</p>';
}

注意-此代码仅适用于父类别“样品类别”中列出的产品。如果它们在父目录中也列出,则适用于子类别中的产品。如果您不希望它们也列在父级猫中-仅子级猫中,则需要一些代码以递归方式向下钻取并标识父级。

本文链接:https://www.f2er.com/3158761.html

大家都在问