Я использую 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>';
?>
Можно ли помочь мне заставить этот взлом работать на сингл-product.php?
Мое предположение - то, что Ваша проблема здесь:
if (is_product_category('b2b'))
Взгляд на Woocommerce Documention для Условных Тегов is_product_category()
возвратится true
на архивах категории продуктов. Поэтому это никогда не будет верно на странице единого продукта.
Что я думаю, что Вам нужно, вместо этого has_term()
который проверяет сообщение на конкретный термин. Поэтому я предложил бы, чтобы Вы изменили свое условное выражение на:
<?php if (has_term('b2b', 'product_cat')) && if current_user_can('read_b2b') { ?>
Вы могли бы хотеть смотреть на документацию WooCommerce, я буду думать, что можно хотеть использовать рычаг/фильтр woocommerce_before_main_content.