Пользовательская таксономия WooCommerce Display в архиве

Пытаюсь показать настраиваемую таксономию "w_label", которую я зарегистрировал для продуктов. Однако, когда я попытался отобразить его с помощью кода ниже:

register_taxonomy('w_label', array('product'), 
    array(  
        'hierarchical' => true, 
        'label' => 'Product Labels',
        'singular_label' => 'Product Label', 
        'rewrite' => true,
        'supports' => array('excerpt', 'thumbnail')

    )
);

function w_label_name () {
    global $post;
    $terms = get_the_terms( $post->ID, 'w_label' );
    foreach ( $terms as $term ){
      echo '<div class="label">' . $term->name . '</div>';
    }

}
add_action( 'woocommerce_before_shop_loop_item_title', 'w_label_name', 2 );

Я продолжаю получать "Предупреждение: для foreach () указан недопустимый аргумент"

Не уверен, что я пропустил. Если я использую этот код для категории WooCommerce по умолчанию, он работает, но не для настраиваемой таксономии, которую я здесь зарегистрировал.


person mark5    schedule 30.06.2016    source источник


Ответы (2)


Сначала попробуйте проверить, нет ли проблем с $terms = get_the_terms($post->ID, 'w_label');, попробуйте в своей функции это, чтобы отобразить $terms:

function w_label_name () {
    global $post;
    $terms = get_the_terms( $post->ID, 'w_label' );
    echo '<div class="label">' . var_dump($terms) . '</div>';
}

Затем попробуйте также get_terms( 'w_label' ); вместо get_the_terms( $post->ID, 'w_label' ); и повторите также var_dump($terms) с этим, чтобы увидеть, что вы получаете.

Если вы что-то получили, проблема исходит от $term->name и способа получения $terms. Тогда вы можете попробовать это (без каких-либо гарантий, потому что не проверено):

function w_label_name () {
    global $post;
    $terms = get_terms( 'w_label' );
    if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
        foreach ( $terms as $term ) {
            echo '<div class="label">' . $term->name . '</div>';
        }
    }
}
add_action( 'woocommerce_before_shop_loop_item_title', 'w_label_name', 10 );
person LoicTheAztec    schedule 30.06.2016
comment
Привет, loic, я получаю ошибку wpobject. После некоторого тестирования это привело меня к переходу на метод get_terms, поскольку я создал эту настраиваемую таксономию для этого варианта использования. - person mark5; 01.07.2016

Это мой код, который правильно показывает этикетки в цикле продукта:

function w_label_name () {
    global $post;
    $taxonomyName = "label_name";
    terms = get_terms( $taxonomyName, array( 'hide_empty' => 0) );
    echo '<div class="label"><ul>';
        foreach ( $terms as $term ) {
            ?><li><?php echo $term->name; ?></li><?php 
        }
    echo '</ul></div>';
}
add_action( 'woocommerce_before_shop_loop_item_title', 'w_label_name', 2 );

См. Также в чем разница между get_terms и get_the_terms в WordPress? для метода get_terms и get_the_terms

person mark5    schedule 30.06.2016