WooCommerce 在存档中显示自定义分类法
WooCommerce Display Custom Taxonomy in archive
正在尝试显示我在产品下注册的自定义分类 "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 );
我不断收到 "Warning: Invalid argument supplied for 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 );
另请参阅
what is the difference between get_terms and get_the_terms in WordPress ?
对于 get_terms 与 get_the_terms 方法
正在尝试显示我在产品下注册的自定义分类 "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 );
我不断收到 "Warning: Invalid argument supplied for 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 );
另请参阅 what is the difference between get_terms and get_the_terms in WordPress ? 对于 get_terms 与 get_the_terms 方法