在WordPress中显示WooCommerce产品类别

时间:2019-04-08 作者:Pbalazs89

我正在尝试创建一个自定义主题。我在我的主题中添加了与Woocommerce的主题兼容性,并试图创建一个产品循环。我想过滤我的循环,使其仅显示类别为“cap”的帖子。我尝试了以下版本:

$params = array(\'posts_per_page\' => 5, \'post_type\' => \'product\', \'category_name\' => \'cap\');
$wc\\u query=新的WP\\u查询($params);?>

并尝试按类别ID显示。两者均未显示任何产品。我做错什么了吗?使用PHP 7.2

一些显示cat设置的图像:

https://www.dropbox.com/s/97p4hj3e2i1lr4v/Screenshot%202019-04-08%2019.31.10.png?dl=0

https://www.dropbox.com/s/ybxvsk9da71saoq/Screenshot%202019-04-08%2019.31.50.png?dl=0

感谢您的帮助!

2 个回复
最合适的回答,由SO网友:mrben522 整理而成

woocommerce类别不是“类别”,而是product_cat 分类学更改参数如下:

$params = array(
    \'posts_per_page\' => 5,
    \'post_type\' => \'product\',
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'product_cat\',
            \'field\' => \'slug\',
            \'terms\' => \'cap\'
        )
    )
);

SO网友:cfx

如果您使用WP_Query 然后根据the WooCommerce wiki:

构建自定义WP\\U查询或数据库查询可能会破坏WooCommerce未来版本中的代码,因为数据会向自定义表移动以获得更好的性能。

创建自定义循环的最佳方法是使用wc_get_products()WC_Product_Query.

在你的情况下,我会这样做:

$paged                   = (get_query_var(\'paged\')) ? absint(get_query_var(\'paged\')) : 1;
$ordering                = WC()->query->get_catalog_ordering_args();
$ordering[\'orderby\']     = array_shift(explode(\' \', $ordering[\'orderby\']));
$ordering[\'orderby\']     = stristr($ordering[\'orderby\'], \'price\') ? \'meta_value_num\' : $ordering[\'orderby\'];
$products_per_page       = 5;// default is apply_filters(\'loop_shop_per_page\', wc_get_default_products_per_row() * wc_get_default_product_rows_per_page());

$category_products       = wc_get_products(array(
  \'status\'               => \'publish\',
  \'limit\'                => $products_per_page,
  \'page\'                 => $paged,
  \'paginate\'             => true,
  \'return\'               => \'ids\',
  \'orderby\'              => $ordering[\'orderby\'],
  \'order\'                => $ordering[\'order\'],
  \'category\'             => array(\'cap\')
));

wc_set_loop_prop(\'current_page\', $paged);
wc_set_loop_prop(\'is_paginated\', wc_string_to_bool(true));
wc_set_loop_prop(\'page_template\', get_page_template_slug());
wc_set_loop_prop(\'per_page\', $products_per_page);
wc_set_loop_prop(\'total\', $category_products->total);
wc_set_loop_prop(\'total_pages\', $category_products->max_num_pages);

if($category_products) {
  do_action(\'woocommerce_before_shop_loop\');
  woocommerce_product_loop_start();
    foreach($category_products->products as $featured_product) {
      $post_object = get_post($featured_product);
      setup_postdata($GLOBALS[\'post\'] =& $post_object);
      wc_get_template_part(\'content\', \'product\');
    }
    wp_reset_postdata();
  woocommerce_product_loop_end();
  do_action(\'woocommerce_after_shop_loop\');
} else {
  do_action(\'woocommerce_no_products_found\');
}
事实上,我写了一篇关于这一点的帖子,如果你好奇或想进一步扩展这一点,我会在这里提供更多细节:https://cfxdesign.com/create-a-custom-woocommerce-product-loop-the-right-way/