Попытка показать пользовательскую таксономию «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 по умолчанию, он работает, но не для пользовательской таксономии, которую я зарегистрировал здесь.
Сначала попробуйте проверить, нет ли проблем с $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 );
Это мой код, который правильно отображает метки в цикле продукта:
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