0
我需要在每个类别下显示类别树和产品的完整列表。包含所有产品的WooCommerce类别树
我用WP_Query获取产品的完整列表,但仍然无法显示类别/子类别,并在其中的每个下面列出相关产品。我正在寻找一种对数据库的查询要求最少的方法。
任何帮助? (不需要html或jquery,我只需要结果数组)
我需要在每个类别下显示类别树和产品的完整列表。包含所有产品的WooCommerce类别树
我用WP_Query获取产品的完整列表,但仍然无法显示类别/子类别,并在其中的每个下面列出相关产品。我正在寻找一种对数据库的查询要求最少的方法。
任何帮助? (不需要html或jquery,我只需要结果数组)
最终结果将是这样的。
SUBCAT 1
-----产品1
-----产品2
----- SUBCAT 1
的子类别1 ----- ---产品1
--------产品2
--------产品3
SUBCAT 2
-----产品1
-----产品2
-----产品3
<?php
// Remove breadcrumb if needed
$post_id = yiw_post_id();
if(get_post_meta($post_id, '_show_breadcrumbs_page', true) == 'no') {
remove_action('woocommerce_before_main_content', 'woocommerce_breadcrumb', 20, 0);
}
if(get_post_meta($post_id, '_slogan_page', true)) {
get_template_part('slogan');
}
/**
* woocommerce_before_main_content hook
*
* @hooked woocommerce_output_content_wrapper - 10 (outputs opening divs for the content)
* @hooked woocommerce_breadcrumb - 20
*/
do_action('woocommerce_before_main_content');
?>
<h1 class="page-title"><?php if(get_post_meta(yiw_post_id(), '_show_title_page', true) == 'yes') woocommerce_page_title(); ?></h1>
<div class="clear"></div>
<?php if (is_tax() && get_query_var('paged') == 0) : ?>
<?php echo '<div class="term-description">' . yiw_addp(term_description()) . '</div>'; ?>
<?php elseif (! is_search() && get_query_var('paged') == 0 && ! empty($shop_page) && is_object($shop_page)) : ?>
<?php echo '<div class="page-description">' . apply_filters('the_content', $shop_page->post_content) . '</div>'; ?>
<?php endif; ?>
<?php if (have_posts()) : ?>
<?php
$args = array(
'taxonomy' => 'product_cat',
);
$cats = get_categories($args);
foreach ($cats as $cat):
if (!$cat->parent):
echo '<div class="clear"></div><h1>' . $cat->name . '</h1>';
// display products which are directly associated with the product category TODO: display only direct products
$args = array('post_type' => 'product', 'posts_per_page' => -1, 'product_cat' => $cat->slug, 'tax_query' => array(array('taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => $cat->slug, 'include_children' => false )));
$wp_query = new WP_Query($args);
?>
<?php
/**
* woocommerce_pagination hook
*
* @hooked woocommerce_pagination - 10
* @hooked woocommerce_result_count - 20
* @hooked woocommerce_catalog_ordering - 30
*/
do_action('woocommerce_before_shop_loop');
?>
<?php woocommerce_product_loop_start(); ?>
<?php woocommerce_product_subcategories(); $woocommerce_loop['loop'] = 0; $woocommerce_loop['columns'] = 0; ?>
<?php while (have_posts()) : the_post(); ?>
<?php woocommerce_get_template_part('content', 'product'); ?>
<?php endwhile; // end of the loop. ?>
<?php
// get children product categories
$subcats = get_categories(array('hide_empty' => 0, 'parent' => $cat->term_id, 'taxonomy' => 'product_cat'));
if (count($subcats) > 0):
$original_query = $wp_query;
foreach ($subcats as $subcat):
set_query_var('category_header_level', 2);
set_query_var('category', $subcat);
woocommerce_get_template_part('archive-product-child-category', 'loop');
endforeach;
$wp_query = null;
$wp_query = $original_query;
wp_reset_postdata();
endif;
else:
/* $args = array('post_type' => 'product', 'posts_per_page' => -1, 'product_cat' => $cat->slug);
$wp_query = new WP_Query($args);
?>
<?php
/**
* woocommerce_pagination hook
*
* @hooked woocommerce_pagination - 10
* @hooked woocommerce_result_count - 20
* @hooked woocommerce_catalog_ordering - 30
*/
/* do_action('woocommerce_before_shop_loop');
?>
<?php woocommerce_product_loop_start(); ?>
<?php woocommerce_product_subcategories(); $woocommerce_loop['loop'] = 0; $woocommerce_loop['columns'] = 0; ?>
<?php while (have_posts()) : the_post(); ?>
<?php woocommerce_get_template_part('content', 'product'); ?>
<?php endwhile; // end of the loop. ?>
<?php */
endif;
endforeach;
$wp_query = null;
$wp_query = $original_query;
wp_reset_postdata();
?>
<?php woocommerce_product_loop_end(); ?>
<?php do_action('woocommerce_after_shop_loop'); ?>
<?php else : ?>
<?php if (! woocommerce_product_subcategories(array('before' => woocommerce_product_loop_start(false), 'after' => woocommerce_product_loop_end(false)))) : ?>
<div class="clear"></div>
<p><?php _e('No products found which match your selection.', 'woocommerce'); ?></p>
<?php endif; ?>
<?php endif; ?>
<div class="clear"></div>
<?php
/**
* woocommerce_pagination hook
*
* @hooked woocommerce_pagination - 10
* @hooked woocommerce_catalog_ordering - 20
*/
do_action('woocommerce_pagination');
?>
<?php
/**
* woocommerce_after_main_content hook
*
* @hooked woocommerce_output_content_wrapper_end - 10 (outputs closing divs for the content)
*/
do_action('woocommerce_after_main_content');
?>
<?php
/**
* woocommerce_sidebar hook
*
* @hooked woocommerce_get_sidebar - 10
*/
do_action('woocommerce_sidebar');
?>
从答案两者Prafulla Kumar Sahu对此question