Как вывести кнопку только в определенных категориях?
Как правильно составить код, чтобы "123456789" выводились только у товаров с родительской категорией "professionalnoe-oborudovanie-karcher-dlya"
//Вывод контактов в карточке товfра add_action( 'woocommerce_single_product_summary', 'product_contacts'); function product_contacts(){ if( is_product() && is_product_category('professionalnoe-oborudovanie-karcher-dlya') ) { echo '123456789'; } else { echo '<div class="product_contacts">Сергей, Ваш персональный менеджер<br><a href="tel:+79676390776">+7 967 639-07-76</a><br><a href="mailto:kar-shop@mail.ru" target="_blanck">kar-shop@mail.ru</a></div><br><a href="https://api.whatsapp.com/send?phone=79676390776&text=Заявка%20с%20сайта"><button class="button whatsapp_button">Консультация в WhatsApp</button>'; } } |
//Вывод контактов в карточке товfра add_action( 'woocommerce_single_product_summary', 'product_contacts'); function product_contacts(){ if( is_product() && is_product_category('professionalnoe-oborudovanie-karcher-dlya') ) { echo '123456789'; } else { echo '<div class="product_contacts">Сергей, Ваш персональный менеджер<br><a href="tel:+79676390776">+7 967 639-07-76</a><br><a href="mailto:kar-shop@mail.ru" target="_blanck">kar-shop@mail.ru</a></div><br><a href="https://api.whatsapp.com/send?phone=79676390776&text=Заявка%20с%20сайта"><button class="button whatsapp_button">Консультация в WhatsApp</button>'; } }
Дополнительно
Ответы:
По WooCommerce, который Вы используете - информации с примерами на php - масса.
1. Определите id товара, когда находитесь в карточке.
2. Зная id товара - запросите список id его родительских категорий.
3. Проверьте наличие id нужной категории (который вы уже знаете) в результате п2.
P.s.
А можно еще проще даже. У Вас в карточке товара есть хлебные крошки, в которых эта родительская категория пишется. Можно на их основе даже.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для WooCommerce правильнее проверять не только текущую категорию товара, но и всех родителей категории. Если товар лежит в дочерней категории внутри
professionalnoe-oborudovanie-karcher-dlya, простая проверка по одному slug может не сработать так, как ожидается.Пример для вывода блока только у товаров из нужной родительской категории:
add_action('woocommerce_single_product_summary', 'product_contacts', 25); function product_contacts() { global $product; if (! $product instanceof WC_Product) { return; } $parent_slug = 'professionalnoe-oborudovanie-karcher-dlya'; $terms = get_the_terms($product->get_id(), 'product_cat'); if (! $terms || is_wp_error($terms)) { return; } $show = false; foreach ($terms as $term) { if ($term->slug === $parent_slug) { $show = true; break; } $ancestors = get_ancestors($term->term_id, 'product_cat'); foreach ($ancestors as $ancestor_id) { $ancestor = get_term($ancestor_id, 'product_cat'); if ($ancestor && ! is_wp_error($ancestor) && $ancestor->slug === $parent_slug) { $show = true; break 2; } } } if (! $show) { return; } echo '<div class="product-contacts">123456789</div>'; }
Если категорий несколько, вынесите slugs в массив и проверяйте через
in_array. Не привязывайтесь к названию категории на русском: его могут поменять в админке. Slug стабильнее.Если блок должен выводиться не только на странице товара, но и в карточках каталога, используйте другой хук, например
woocommerce_after_shop_loop_item. Внутри логика проверки категории остаётся такой же, но источник товара может отличаться. После правки очистите кэш и проверьте товар из самой родительской категории и товар из дочерней. Это важно: чаще всего код работает на прямой категории, но не работает на вложенной, потому что разработчик забыл пройтись по ancestors.