【问题标题】:Woocommerce how to display relevant tags under category titleWoocommerce如何在类别标题下显示相关标签
【发布时间】:2021-10-01 17:31:58
【问题描述】:

我想在每个类别标题下显示元标记。我可以看到有这段代码可以显示每个产品的产品标签列表,但我真正想要的是每个类别的产品标签,然后将其显示在页面的类别标题下。

<?php

global $product;

?>

<div class="product-tags">

<?php 

echo wc_get_product_tag_list( $product->get_id(), ', ' ); 

?>

</div>

示例截图:

【问题讨论】:

    标签: php wordpress woocommerce tags wordpress-theming


    【解决方案1】:

    好吧,您已经知道/拥有类别名称(即“咖啡设备”),因此您可以使用它来获取相关标签,但为此,我们将在 functions.php 中创建一个函数您的活动主题,如下所示:

    以下代码将转到您的活动主题的functions.php 文件:

    function your_theme_get_tags_based_on_cat($cat_name)
    {
    
      $cat_id = get_cat_ID($cat_name);
    
      $tag_query = new WP_Query(array(
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'post_status'    => 'publish',
        'tax_query'      => array(
          array(
              'taxonomy'      => 'product_cat',
              'field'         => 'term_id', 
              'terms'         => $cat_id,
              'operator'      => 'IN' 
            )
          )
      ));
    
      $all_tags = array();
    
      while ($tag_query->have_posts()) {
        $tag_query->the_post();
        $producttags = get_the_tags();
        if ($producttags) {
          foreach ((array)$producttags as $tag_obj) {
            $all_tags[] = $tag_obj->term_id . '-' . $tag_obj->name;
          }
        }
      };
    
      $tags_array = array_unique($all_tags);
    
      $new_array = array_map(function ($val) {
        return explode("-", $val);
      }, $tags_array);
    
      return new_array;
    }
    

    上述函数将返回一个关联数组,其中包含您的 PRODUCT 类别的相应标签的 tag idtag name

    旁注:
    如果您需要将它用于您的 wordpress 网站的博客文章,那么您可以通过将 'post_type' =&gt; 'product' 参数与 'post_type' =&gt; 'posts' 交换来更改/修改查询。因此,您对博客文章的查询将是这样的:

    $blog_tag_query = new WP_Query(array('post_type'=&gt;'post','post_status' =&gt;'publish','cat'=&gt;$cat_id,'posts_per_page'=&gt;-1));

    如果您决定将它用于您的博客文章,还记得在您的模板中将get_term_link((int)$tag[0], 'product_tag') 更改为get_term_link((int)$tag[0], 'post_tag')

    现在您有了一个神奇的功能 :),您可以在任何需要特定类别标签列表的地方使用它!

    所以让我们在你的页面模板中使用我们的函数来填充当前类别的相应标签,如下所示:

    $cat_name = 'Coffee Equipment';
    
    $tags_array = your_theme_get_tags_based_on_cat($cat_name);
    
    foreach ($tags_array as $tag) 
    {
    echo '<a class="item" href="' . get_term_link((int)$tag[0], 'product_tag') . '">' . $tag[1] . '</a>';
    };
    

    刚刚经过测试,可以无缝运行!随意在您的html template/markup 上根据需要对其进行自定义。

    【讨论】:

    • 我想知道@Ruvee,因为我是 wordpress 新手。还有一件事我想问你。我的客户要求创建一些类似于手风琴的过滤器,并且根据类别,它将显示正确的过滤器。此链接是一个很好的示例,如果您从顶部菜单“咖啡”、“杯子”等切换类别,左侧的过滤器会更改:categoricallycoffee.co.uk/collections/coffees。你不知道是否有合适的免费插件可以处理这个问题,还是必须通过代码?
    • 谢谢!老实说,我编写了自己的过滤器以及客户所需的几乎所有东西,所以我并没有真正使用任何插件,因此我不知道要推荐任何插件,但我很乐意如果您对 SO 上的代码有任何疑问,请尝试提供帮助!
    • 如果您不介意,我想知道如何根据产品类别创建不同的过滤器。让我给你举个例子……
    • 所以这是实时网站:balancecoffee.co.uk,如果您不介意前往其中一个商店页面。我的客户给出的说明是:“从 Balance 网站上删除绿色列并替换为类似此页面的过滤器:categoricallycoffee.co.uk/collections/coffees
    • 那么你可以在他们的网站上看到,当你切换到不同的产品类别时,过滤器会发生变化。现在他没有那么多过滤器了。例如,对于他的咖啡,他可以有价格过滤器、评论过滤器、袋装过滤器和研磨尺寸过滤器。然后,当移动到另一个类别产品时,他将有价格和评论过滤器,然后是任何其他与该类别产品相关的变化,如果这有意义的话。但我不知道从哪里开始。我更像是前端而不是后端开发人员,所以不知道该怎么做。任何帮助将不胜感激:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    相关资源
    最近更新 更多