Woocommerce:只显示来自同一子类别的相关产品
问题描述:
相关产品是从您的商店中抽取与当前产品共享相同标签或类别的其他产品的部分。Woocommerce:只显示来自同一子类别的相关产品
可以说,我卖我的商店表(和其他物品)。表是一个类别。我有3个子类与小类,中等和大类一起使用。
我想要什么:当你点击一张小桌子时。相关产品只应显示小表。 它做什么:当你点击一张小桌子时。相关的产品显示了一个不论大小的表格。
有谁知道我可以如何改变它,以我想要的方式?
答
你必须在你的模板woocommerce->单品文件夹和文件related.php创建。
只需粘贴此代码即可。
<?php
/**
* Related Products
*
* This template can be overridden by copying it to yourtheme/woocommerce/single-product/related.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://docs.woocommerce.com/document/template-structure/
* @author WooThemes
* @package WooCommerce/Templates
* @version 1.6.4
*/
if (! defined('ABSPATH')) {
exit;
}
global $product, $woocommerce_loop;
if (empty($product) || ! $product->exists()) {
return;
}
if (! $related = $product->get_related($posts_per_page)) {
return;
}
$cats_array = array(0);
// get categories
$terms = wp_get_post_terms($product->id, 'product_cat');
// select only the category which doesn't have any children
foreach ($terms as $term) {
$children = get_term_children($term->term_id, 'product_cat');
if (!sizeof($children))
$cats_array[] = $term->term_id;
}
var_dump($cats_array);
$args = apply_filters('woocommerce_related_products_args', array(
'post_type' => 'product',
'ignore_sticky_posts' => 1,
'no_found_rows' => 1,
'posts_per_page' => $posts_per_page,
'orderby' => $orderby,
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'id',
'terms' => $cats_array
),
)
));
$products = new WP_Query($args);
$woocommerce_loop['name'] = 'related';
$woocommerce_loop['columns'] = apply_filters('woocommerce_related_products_columns', $columns);
if ($products->have_posts()) : ?>
<div class="related products">
<h2><?php _e('Related Products', 'woocommerce'); ?></h2>
<?php woocommerce_product_loop_start(); ?>
<?php while ($products->have_posts()) : $products->the_post(); ?>
<?php wc_get_template_part('content', 'product'); ?>
<?php endwhile; // end of the loop. ?>
<?php woocommerce_product_loop_end(); ?>
</div>
<?php endif;
wp_reset_postdata();