You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce单品页同品牌产品查询需排除目录隐藏商品

WooCommerce单品页同品牌商品排除隐藏项的修复方案

你当前的代码在查询同品牌商品时,会展示目录可见性设置为隐藏的商品,原因是你使用的woocommerce_product_query_tax_query过滤器仅对WooCommerce的主产品查询生效,而你这里用的是自定义WP_Query,加上过滤器里的is_main_query()判断,导致过滤逻辑完全没起作用。

直接修改自定义查询的参数,把排除隐藏商品的条件直接加入tax_query即可解决问题,以下是修复后的完整代码:

<div class="brand-section">
    <?php
    // 获取当前商品
    global $product;

    // 获取商品品牌分类项(请替换为你实际的品牌分类法slug)
    $brand_term = wp_get_post_terms($product->get_id(), 'product_brand', array('fields' => 'ids'));

    // 显示品牌图片
    if (!empty($brand_term)) {
        $brand_id = $brand_term[0];
        $brand_image_id = get_term_meta($brand_id, 'brand_image', true);
        if (!empty($brand_image_id)) {
            echo '<div class="brand-image">';
            echo '<img src="' . esc_url(wp_get_attachment_image_url($brand_image_id, 'full')) . '" alt="' . esc_attr(get_term($brand_id)->name) . '">';
            echo '</div>';
        }
    }
    ?>

    <?php
    // 显示同品牌的其他商品
    if (!empty($brand_term)) {
        $args = array(
            'post_type' => 'product',
            'posts_per_page' => 4, // 仅显示4个商品
            'tax_query' => array(
                'relation' => 'AND', // 确保两个分类条件同时满足
                array(
                    'taxonomy' => 'product_brand',
                    'field' => 'id',
                    'terms' => $brand_term,
                ),
                array(
                    'taxonomy' => 'product_visibility',
                    'field' => 'slug',
                    'terms' => array('exclude-from-catalog', 'exclude-from-search'),
                    'operator' => 'NOT IN',
                )
            ),
            'post__not_in' => array($product->get_id()), // 排除当前商品
        );

        $brand_query = new WP_Query($args);

        if ($brand_query->have_posts()) {
            echo '<div class="other-products-from-brand">';
            echo '<h3 class="other-products-heading">同品牌其他商品:' . esc_html(get_term($brand_id)->name) . '</h3>';
            while ($brand_query->have_posts()) {
                $brand_query->the_post();
                // 显示商品信息(图片、标题、价格、加入购物车按钮)
                echo '<div class="product-item">';
                echo '<a href="' . get_permalink() . '">' . get_the_post_thumbnail() . '</a>';
                echo '<h4><a href="' . get_permalink() . '">' . get_the_title() . '</h4>';
                echo '<div class="price">' . wc_price(get_post_meta(get_the_ID(), '_regular_price', true)) . '</div>';
                echo '<div class="add-to-cart-button">' . do_shortcode('[add_to_cart id="' . get_the_ID() . '"]') . '</div>';
                echo '</div>';
            }
            echo '</div>';
            wp_reset_postdata();
        }
    }
    ?>
</div>

关键修改说明:

  • 移除了无效的custom_exclude_hidden_products过滤器及相关操作,自定义WP_Query不会触发针对主查询的过滤器
  • 在tax_query中添加relation => 'AND',确保品牌匹配和可见性条件同时生效
  • 直接加入product_visibility的排除条件,筛选掉标记为exclude-from-catalog(目录隐藏)和exclude-from-search(搜索隐藏)的商品
  • 若需排除缺货商品,可将'outofstock'加入到terms数组中

内容的提问来源于stack exchange,提问作者Aum Vaghela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:33:26