在WooCommerce

时间:2017-11-20 21:33:43

标签: php wordpress woocommerce tags taxonomy

我一直在商店里使用产品标签作为产品的品牌。我在网上找到的以下代码一直工作正常(直到最近更新woocommerce和WP)才能在我的"品牌"页。它列出了每个特定类别信件下的所有品牌。

突然没有生成任何URL,其他所有内容都应该填充。我真的无法找到问题。我尝试将get_terms修改为get_terms(array('taxonomy'=>'product_tag')),但它也无效。

这是我的代码:

$list = '';
$tags = get_terms( 'product_tag' );
$groups = array();
if( $tags && is_array( $tags ) ) {
    foreach( $tags as $tag ) {
        $first_letter = strtoupper( $tag->name[0] );
        $groups[ $first_letter ][] = $tag;
    }
    if( !empty( $groups ) ) {
        foreach( $groups as $letter => $tags ) {
            $list .= "\n\t" . '<div class="brand_category_container">';
            $list .= "\n\t" . '<h4 class="cateogry_letter">' . apply_filters( 'the_title', $letter ) . '</h2>';
            $list .= "\n\t" . '<ul>';
            foreach( $tags as $tag ) {
                $url = get_tag_link( $tag->term_id );
                $count = intval( $tag->count );
                $name = apply_filters( 'the_title', $tag->name );
                $list .= "\n\t\t" . '<li><a class="category_links" href="' . $url . '">' . $name . '</a></li>';
                }
            $list .= "\n\t" . '</ul></li>';
            $list .= "\n\t" . '</div>';
        }
    }
} else $list .= "\n\t" . '<p>Sorry, but no tags were found</p>';

在我的产品页面上我列出了

的品牌
$tag_count = sizeof( get_the_terms( $post->ID, 'product_tag' ) );
?>
<div class="single_productbrand">
    <?php echo $product->get_tags( ', ', '<span class="brand_as">' . _n( '', '', $tag_count, 'woocommerce' ) . ' ', '</span>' ); ?>
</div>

它可以正常工作

如何取回网址?

2 个答案:

答案 0 :(得分:1)

代码中与product tag terms links相关的主要问题是这一行:

$url = get_tag_link( $tag->term_id );
  

需要替换为需要2个参数的get_term_link() WordPress函数,术语对象(或术语ID)和分类。

正如您现在所知,产品标签是自定义分类 'product_tag' ...

同样在您的代码中,即使它有效,您最好使用不同的变量名称,因为您在两个具有不同值的不同部分中使用$tags变量名称。

所以你重新访问的功能代码将是:

$taxonomy = 'product_tag';
$tags = get_terms( $taxonomy );
if( $tags && is_array( $tags ) ) {
    foreach( $tags as $tag ) {
        $first_letter = strtoupper( $tag->name[0] );
        $groups[ $first_letter ][] = $tag;
    }
    if( !empty( $groups ) ) {
        $list = '';
        foreach( $groups as $letter => $letter_tags ) {
            $list .= "\n\t" . '<div class="brand_category_container">';
            $list .= "\n\t" . '<h4 class="cateogry_letter">' . apply_filters( 'the_title', $letter ) . '</h2>';
            $list .= "\n\t" . '<ul>';
            foreach( $letter_tags as $tag ) {
                $term_link = get_term_link( $tag->term_id, $taxonomy );
                $count = intval( $tag->count );
                $name = apply_filters( 'the_title', $tag->name );
                $list .= "\n\t\t" . '<li><a class="category_links" href="' . $term_link . '">' . $name . '</a></li>';
            }
            $list .= "\n\t" . '</ul></li>';
            $list .= "\n\t" . '</div>';
        }
    }
}
else $list .= "\n\t" . '<p>Sorry, but no tags were found</p>';

// Output
echo $list;

这次Urls指向正确的路径......

答案 1 :(得分:0)

感谢回答LoicTheAztec,它帮助我解决了问题但是当我用intval转换id时。

注意:让我告诉你,当我将WordPress更新到4.9版本时,这发生了,否则get_tag_link对我来说非常好。 再次感谢