如何在woocommerce商店页面中隐藏同名产品?

时间:2019-06-13 06:44:02

标签: php woocommerce pagination duplicates hook-woocommerce

我正在创建一个电子商务网站。在该网站上,我添加了许多产品。有些产品具有相同的名称,但我想在商店页面中隐藏相同名称的产品。
例如:-,有一个名为“ ABC ”且名称为“ ABC ”的产品。添加了很多产品,但sku不同,因此在“商店”页面中,我只想显示一种具有相同名称产品的产品。

archive-product.php

$pn[0] = 'demo';
$i = 0;
while (have_posts()) {
  the_post();
  do_action('woocommerce_shop_loop');
  global $product;
  $pr = $product->get_name();
  $j = 0;
  $ps = sizeof($pn);
  $a = 1;
  while ($j <= $ps) {
    if ($pn[$j] == $pr) {
      $a = 0;
      break;
    }
    $j++;
  }
  if ($a != 0) {
    $i++;
    $pn[$i] = $pr;
    wc_get_template_part('content', 'product', $rst);
  }
}

此代码可以正常工作,但问题在分页中。在第1页中,它仅显示1个产品,并隐藏所有其他具有相同名称的产品,但将在分页的第2页中显示其他名称的产品,而这些产品将不会在第1页中显示。
而且我也不想将同名产品设为私有或不公开。

2 个答案:

答案 0 :(得分:0)

您可以使用WP_QUERY的posts_distinct过滤器来完成此操作。 (还原模板的while循环代码)

add_filter( 'posts_distinct', function ( $distinct ) {
    if ( is_admin())return $distinct;
    //i have added just one is_admin exception,
    //but you can add there another conditions as well
    return 'DISTINCT';
});

答案 1 :(得分:0)

我遇到了同样的问题,并且已经设法通过一个函数做到了。该功能在商店页面,类别和搜索结果中隐藏相同标题的产品。

尝试一下:

add_filter( 'posts_groupby', 'custom_posts_groupby', 10, 2 );
function custom_posts_groupby( $groupby, $query ) {
     global $wpdb;

     if ( is_main_query() && (is_shop() || is_product_category() || is_search() )) {
         $groupby = "{$wpdb->posts}.post_title";
     }

     return $groupby;
}

您可以在这里https://stackoverflow.com/a/60837657/10183871

看到我的问题