Заменить цену продукта WooCommerce текстом для незарегистрированных пользователей и определенным тегом продукта

#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;