Скрыть цены на товары и кнопки «добавить в корзину», но не изменения для незарегистрированных пользователей в WooCommerce

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

add_action('init','hide_price'); function hide_price(){ if(!is_user_logged_in()){ 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_single_product_summary','woocommerce_template_single_price',10); remove_action('woocommerce_after_shop_loop_item_title','woocommerce_template_loop_price',10); add_action('woocommerce_single_product_summary','print_login_to_see',31); add_action('woocommerce_after_shop_loop_item','print_login_to_see',11); } } function print_login_to_see(){ echo '<a href="' . get_permalink(woocommerce_get_page_id('myaccount')) . '">' . __('Login to see prices','theme_name') . '</a>'; } 

Однако это также устраняет отклонение вариации, и я хотел бы сохранить это.

Есть ли какой-либо прямой способ сохранить раскрывающееся меню вариантов, но все же скрыть цены до тех пор, пока клиент не войдет в систему?

благодаря

Обновлено:

Вам нужно будет разделить страницы магазинов и архивов с отдельных страниц продукта. На страницах с одним продуктом вы будете нацелены на переменные продукты, чтобы добавлять и удалять определенные связанные функции.

Последняя вещь, в вашей функции print_login_to_see() , woocommerce_get_page_id() устарела и заменена на wc_get_page_id()

Таким образом, ваш код будет выглядеть так:

 // For product archives pages add_action( 'init', 'hide_product_archives_prices' ); function hide_product_archives_prices(){ if( is_user_logged_in() ) return; remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 ); remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10) ; add_action ( 'woocommerce_after_shop_loop_item', 'print_login_to_see', 10 ); } // add_action( 'woocommerce_single_product_summary', 'hide_single_product_prices', 1 ); function hide_single_product_prices(){ if( is_user_logged_in() ) return; global $product; remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 ); if( ! $product->is_type('variable') ){ remove_action('woocommerce_single_product_summary','woocommerce_template_single_add_to_cart', 30 ); add_action( 'woocommerce_single_product_summary','print_login_to_see', 30 ); } else { remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation', 10); remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 ); add_action( 'woocommerce_single_variation', 'print_login_to_see', 20 ); } } // Display a my account link function print_login_to_see(){ echo '<a href="' . get_permalink( wc_get_page_id( 'myaccount' ) ) . '" class="button">' . __('Login to see prices','theme_name') . '</a>'; } 

Код идет в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

Этот код тестируется на WooCommerce 3+ и работает.