#php #wordpress #woocommerce
#php #wordpress #woocommerce
Вопрос:
Я пытаюсь внести некоторые изменения в код, который я нашел здесь, что позволит мне скрыть все цены в моем магазине woocommerce, ЗА исключением одной категории.
Категория, для которой я хочу постоянно отображать цены, — это «курсы», но я хочу скрыть остальные цены на продукты, пока пользователь не войдет в систему. Я пытаюсь внести изменения в этот код
add_action( 'init', 'bbloomer_hide_price_add_cart_not_logged_in' );
function bbloomer_hide_price_add_cart_not_logged_in() {
if (! is_user_logged_in() amp;amp;
! has_term( 'courses', 'product_cat' ) )
{
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', 'bbloomer_print_login_to_see', 31 );
add_action( 'woocommerce_after_shop_loop_item', 'bbloomer_print_login_to_see', 11 );
}
}
function bbloomer_print_login_to_see() {
echo '<a class="button product_type_simple" href="' .
get_permalink(wc_get_page_id('myaccount')) . '">' .
__('Login to see prices', 'theme_name') . '</a>';
}
Любая помощь будет высоко оценена!
Ответ №1:
Вместо удаления каждого действия, которое выводит price
simply, удалите цену.
Этот код будет фильтровать get_price_html()
функцию из WC_Product
класса и возвращать пустую строку.
function bbloomer_hide_price_add_cart_not_logged_in() {
global $product;
if (! is_user_logged_in() amp;amp;
!has_term( 'courses', 'product_cat', $product->get_id()))
{
add_filter('woocommerce_get_price_html', '__return_empty_string', 10);
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 );
}
}
или… чтобы добавить свой клик на кнопку входа…
function bbloomer_hide_price_add_cart_not_logged_in() {
global $product;
if (!is_user_logged_in() amp;amp;
!has_term( 'courses', 'product_cat', $product->get_id())) // add product ID to check if that specific product is part of courses category.
{
add_filter('woocommerce_get_price_html', 'bbloomer_print_login_to_see'),
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 ); 10);
}
}
function bbloomer_print_login_to_see() {
// Modify the function to return the value, not echo it.
return '<a class="button product_type_simple" href="' .
get_permalink(wc_get_page_id('myaccount')) . '">' .
__('Login to see prices', 'theme_name') . '</a>';
}
Исправленные дополнения к ответам
- Получите доступ к текущему
$product
внутри вашего цикла, чтобы проверить, является ли он частьюcourses
category. - Удалить
add to cart button
со страниц отдельных продуктов, если продукт является частью категорииcourses
Комментарии:
1. Это по-прежнему скрывает цену на страницах продуктов курсов. Я должен упомянуть, что хочу иметь возможность скрывать возможность добавления в корзину, пока пользователь не войдет в систему. Это для каждого продукта, который не подпадает под категорию «Курсы»..
2. Хорошо, в этот момент вы начнете использовать
remove_action
, чтобы удалить кнопки добавления в корзину, я добавлю их в свой ответ3. Привет, приятель — спасибо за ваш ответ. Тем не менее, это по-прежнему скрывает все цены по всему сайту.. не для всех, кроме одной категории..