Woocommerce:仅显示相同子类别的相关产品 [英] Woocommerce: Only show related products from same subcategory

查看:46
本文介绍了Woocommerce:仅显示相同子类别的相关产品的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

相关产品是一个部分,可从您的商店中提取与当前产品共享相同标签或类别的其他产品。

Related products is a section that pulls other products from your store that share the same tags or categories as the current product.

src: Woocommerce文档

可以说我在商店里卖桌子(和其他物品)。表格是一个类别。我有3个子类别,与表类别同时存在:小,中和大。

Lets say I sell tables (and other items) in my store. Tables is a category. I have 3 subcategorys that go with the table category: Small, Medium and Large.

我想要什么:当您单击小桌子时。相关产品应仅显示小桌子。
它的作用:单击小桌子时。相关产品显示了任何尺寸的桌子。

What I want: when you click on a small table. The related products should only show small tables. What it does: When you click on a small table. The related products shows a table from whatever size.

有人知道我如何将其更改为想要的方式吗?

Does anyone know how I can change it to the way I want?

推荐答案

Woocommerce 3.9.0更新



对@ alejandro-restrepo给出的出色答案的稍作修改-此版本还不包括当前产品,并从Woocommerce 3.9.0模板进行了修改。

Update for Woocommerce 3.9.0

Slight modification to the excellent answer given by @alejandro-restrepo - this version also excludes the current product from the related products query, and is modified from the Woocommerce 3.9.0 template.

将此代码复制到 [您的主题] / woocommerce / single-product / 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     3.9.0
 */

if ( ! defined( 'ABSPATH' ) ) {
  exit;
}

global $product, $woocommerce_loop;

if ( empty( $product ) || ! $product->exists() ) {
  return;
}

if ( ! $related = $product->get_related( $posts_per_page ) ) {
  return;
}

// Get ID of current product, to exclude it from the related products query
$current_product_id = $product->get_id();

$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;
}

$args = apply_filters( 'woocommerce_related_products_args', array(
  'post_type' => 'product',
  'post__not_in' => array( $current_product_id ),   // exclude current 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() ) : ?>

  <section class="related products">

    <?php
    $heading = apply_filters( 'woocommerce_product_related_products_heading', __( 'Related products', 'woocommerce' ) );

    if ( $heading ) :
    ?>
      <h2><?php echo esc_html( $heading ); ?></h2>
    <?php endif; ?>

    <?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(); ?>

  </section>

<?php endif;

wp_reset_postdata();

这篇关于Woocommerce:仅显示相同子类别的相关产品的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆