Intereting Posts
Крючок 'user_has_cap', по-видимому, принимает две загрузки страницы для запуска Невозможно добавить класс в тег h2 Проблемы с подключением плагинов / папок с Azure Переписывание основной функциональности WordPress: изменение личных сообщений Изменение сайта и homeurl – внутренние ссылки перенаправляются на главную страницу? загрузите другую таблицу стилей в сообщение категории Как отображать связанные записи из родительской категории добавить класс при входе в систему Как отправить / загрузить данные в базу данных и в определенную папку? Пользовательские размеры изображений только для эскизов Таксономия и дата в том же запросе? Перечислять сообщения терминов, но исключать один срок Многопроцессор WordPress не возвращается, как ожидалось Манипулирование изображениями внутри содержимого сообщения Используя пользовательский Javascript и pHp для отправки электронной почты себе, когда пользователь нажимает кнопку ввода, но работает только на Chrome, IE и Micorosft Edge

Требовать возможности просмотра продукта Woocommerce

Я использую Woocommerce, и у меня есть продукты в категории B2B, чей single_product.php должен быть показан только людям с возможностью read_b2b.

<?php if ( have_posts() ) : ?> <?php do_action('woocommerce_before_shop_loop'); ?> <?php if (is_product_category('b2b')) && if current_user_can('read_b2b') { ?> //*** In this case show the PRODUCT with the LOOP *** <?php while ( have_posts() ) : the_post(); ?> <?php woocommerce_get_template_part( 'content', 'single-product' ); ?> <?php endwhile; // end of the loop. ?> <?php } else { //*** show error message *** echo '<p>You have to be a registered b2b user to see this product</p>'; ?> 

Можете ли вы помочь мне заставить этот хак работать на single-product.php?

Я предполагаю, что ваша проблема здесь:

 if (is_product_category('b2b')) 

Взглянув на документацию Woocommerce для условных тегов, is_product_category() вернет true в архивах категорий продуктов. Поэтому это никогда не будет верно на странице одного продукта.

Мне кажется, что вам нужно вместо этого has_term() который проверяет сообщение для определенного термина. Поэтому я предлагаю вам изменить свое условное выражение на:

 <?php if (has_term('b2b', 'product_cat')) && if current_user_can('read_b2b') { ?> 

Возможно, вы захотите взглянуть на документацию WooCommerce , я думаю, вы можете использовать hook / filter woocommerce_before_main_content.