#php #wordpress #woocommerce #product #taxonomy-terms
#php #wordpress #woocommerce #продукт #таксономия-термины
Вопрос:
В WooCommerce я использую следующий код:
<?php
global $product;
$terms = get_the_terms( $product->get_id(), 'product_tag' );
for ($i = 0; $i < count($terms); $i ) {
$tags[] = $terms[$i]->slug;
}
?>
<?php if ( $price_html = $product->get_price_html() ) : ?>
<?php if (is_user_logged_in() amp;amp; in_array('HIDDEN TAG', $tags)): ?>
<span class="price">Please Log-in</span>
<?php else: ?>
<span class="price"><?php echo $price_html; ?></span>
<?php endif; ?>
<?php endif; ?>
Для продуктов этот код должен заменить цену на «Пожалуйста, войдите», когда клиент не регистрируется на продуктах, которые имеют тег продукта ‘HIDDEN TAG’.
Я не понимаю, почему это не работает. Любая помощь приветствуется.
Ответ №1:
Ваше условие должно быть ! is_user_logged_in()
. Я сократил и пересмотрел ваш код:
<?php global $product;
// To be sure that we get the product Object (if needed)
if( ! is_a($product, 'WC_Product') )
$product = wc_get_product( get_the_id() );
if ( $price_html = $product->get_price_html() ) {
// Get the term ID from 'HIDDEN TAG' product tag
$term_id = get_term_by( 'name', 'HIDDEN TAG', 'product_tag' )->term_id;
// added "!" to is_user_logged_in() for unlogged users and made some other changes
if ( ! is_user_logged_in() amp;amp; in_array( $term_id, $product->get_tag_ids() ) ) {
echo '<span class="price">'.__("Please Log-in").'</span>';
} else {
echo '<span class="price">'.$price_html.'</span>';
}
} ?>
Теперь это должно сработать.
Код мог бы быть еще короче, если бы вы могли установить прямо в коде правильный идентификатор термина для «СКРЫТОГО ТЕГА» (вместо названия термина), как, например, (если
57
идентификатор термина) в:
in_array( 57, $product->get_tag_ids() )
Удаление ненужных:
// Get the term ID from 'HIDDEN TAG' product tag $term_id = get_term_by( 'name', 'HIDDEN TAG', 'product_tag' )->term_id;