如何在 'shop' 页面而不是产品上显示 WooCommerce 类别?

How to show WooCommerce Categories on 'shop' page instead of products?

我看过this question and answer。那行不通。


设置

我是运行:

我有一个自定义主题,通过将我自己的模板放在以下位置来覆盖某些 WooCommerce 模板:themes/my_theme/woocommerce/template-name.php

我确定商店页面(主页)使用模板 archive-product.php。我已将 plugins/woocommerce/templates/archive-product.php 中的 this 复制到我的主题中,并做了一些小的 HTML 更改,效果很好。我的主题副本没有功能变化,只是一些 HTML.

问题

我希望主页仅以缩略图形式显示商店类别。有一个选项可以将商店页面设置为显示类别而不是产品:

外观 > 自定义 > WooCommerce > 目录

商店页面显示已设置为显示类别

不过店铺首页似乎完全忽略了这个设置,依然显示商品。 WooCommerce 的 自己的模板 不支持此设置似乎令人惊讶!

如何在模板中找到此设置,然后在商店主页上显示类别(作为缩略图)?

对于循环类别,是否有等同于 woocommerce_product_loop() 的方法?


附带说明一下,Storefront 主题确实支持该设置,但 Storefront 没有模板 archive-product.php。 Storefront 似乎是高度抽象的,经过多次调试/尝试将其拆开,我到目前为止还没有弄清楚它用于商店页面的模板文件。

我的主题已经在制作中,我只是想进行更新,以便主页显示类别而不是直接进入产品列表。

我找到了可行的解决方案。 WooCommerce 默认模板不支持在商店页面上显示类别的设置。

但是使用带有 do_shortcode() 的短代码,并且可以按如下方式实现的条件:

if (is_shop()) {

  echo do_shortcode('[product_categories hide_empty="0"]');

} else {

  woocommerce_product_loop_start();

  if ( wc_get_loop_prop( 'total' ) ) {
    while ( have_posts() ) {
      the_post();

      /**
      * Hook: woocommerce_shop_loop.
      */
      do_action( 'woocommerce_shop_loop' );

      wc_get_template_part( 'content', 'product' );
    }

  }

  woocommerce_product_loop_end();
}

仍然:

  • 我想知道如何选择问题中显示的 'show categories' 自定义设置,所以我的主题对此做出了回应。
  • 有没有比使用 do_shortcode() 更好的方法,这感觉有点 hack