Скрыть цену для определенной категории в WooCommerce и только только определенную роль пользователя для покупки из этой категории - PullRequest
1 голос
/ 05 ноября 2019

Привет, кто-нибудь может привести меня в правильном направлении. Это то, чего я пытаюсь достичь с моим магазином WooCommerce. У меня есть магазин, в котором есть категории, доступные для широкой публики, но одна категория является специализированной и требует одобрения для покупки, поэтому я хочу создать определенную роль пользователя для этой категории.

Я смог достичь скрытых ценв одной категории, но, кажется, не может решить, как ограничить покупку этой категории и показать цены для конкретной роли пользователя.

Так, например,

Родительская категория Типовая категория и все его подкатегории должны иметь скрытую цену, если в нее не войдет роль пользователя «типовая категория Клиент» . Вместо цены будет иметь текст «зарегистрироваться для цены»

Только роль пользователя типовая категория Клиент может приобретать товары из типовой категории и ее подкатегорий. Любой другой роли пользователя будет запрещено покупать предметы из категории, но предметы будут по-прежнему видны им по скрытой цене.

Пользователь в категории *1022* может приобрести в любом месте

Все остальные категории, чтобы иметь видимые цены для всех ролей пользователей. Все категории, включая Образец категории (которая будет иметь скрытую цену), будут видны всем

спасибо за любую помощь

Ванесса

1 Ответ

0 голосов
/ 06 ноября 2019

Ниже я изменил код, написанный ранее для оптовых покупателей. Код удаляет цену и кнопку «Добавить в корзину» и вообще запрещает покупку этих продуктов.

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', 'print_login_to_access', 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', 'woocommerce_template_loop_add_to_cart', 10 );
            remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
            remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
            remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );

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

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

Примечание. Этот код работает только для продуктов, перечисленных в родительской категории «Типовая категория». Это будет работать для продуктов в подкатегориях, если они также перечислены в родительской категории. Если вы не хотите, чтобы они также были указаны в родительском коте - только подкатегории - вам понадобится код для рекурсивной детализации и идентификации родителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...