无法从wp_get_Products循环(或短码)中筛选出正在销售的可变产品

时间:2021-07-26 作者:DeltaG

我想过滤掉所有products in sale 来自WooCommerce循环。因此,我们的目标是创建一个产品循环new, 但不包含销售产品。问题是这些产品都是可变产品。我已经尝试使用常规的短代码,现在我正尝试使用自定义循环(wp\\u get\\u产品)来实现这一点。但我还是不明白为什么它没有按应有的方式工作。

我希望有人能在这方面帮助我。

我当前使用wp\\U get\\U产品的自定义循环(不工作):

  if(!function_exists(\'wc_get_products\')) {
    return;
  }

  $date_range              = strtotime ( \'-8 days\' );

  $paged                   = (get_query_var(\'paged\')) ? absint(get_query_var(\'paged\')) : 1;
  $products_per_page       = apply_filters(\'loop_shop_per_page\', wc_get_default_products_per_row() * wc_get_default_product_rows_per_page());

  $recentProducts       = wc_get_products(array(
    \'meta_key\'             => \'_price\',
    \'status\'               => \'publish\',
    \'limit\'                => $products_per_page,
    \'page\'                 => $paged,
    \'paginate\'             => true,
    \'return\'               => \'ids\',
    \'orderby\'              => \'date\',
    \'order\'                => \'DESC\',
    \'date_query\'           => array(
        array(
            \'after\' => array(
                \'year\'  => date(\'Y\', $date_range ),
                \'month\' => date(\'m\', $date_range ),
                \'day\'   => date(\'d\', $date_range ),
            ),
        )
    )
  ));

  var_dump($recentProducts);

  wc_set_loop_prop(\'current_page\', $paged);
  wc_set_loop_prop(\'is_paginated\', wc_string_to_bool(true));
  wc_set_loop_prop(\'page_template\', get_page_template_slug());
  wc_set_loop_prop(\'per_page\', $products_per_page);
  wc_set_loop_prop(\'total\', $recentProducts->total);
  wc_set_loop_prop(\'total_pages\', $recentProducts->max_num_pages);

  if($recentProducts) {
    do_action(\'woocommerce_before_shop_loop\');
    woocommerce_product_loop_start();
      foreach($recentProducts->products as $recentProduct) {
        $productObject = wc_get_product( $recentProduct );

        //if ( !$productObject->is_on_sale() ) {
            $post_object = get_post($recentProduct);
            setup_postdata($GLOBALS[\'post\'] =& $post_object);
            wc_get_template_part(\'content\', \'product\');
        //}

      }
      wp_reset_postdata();
    woocommerce_product_loop_end();
    do_action(\'woocommerce_after_shop_loop\');
  } else {
    do_action(\'woocommerce_no_products_found\');
  }
以上代码输出过去8天发布的所有产品(这很好)。问题是,我不知道如何在wp\\u get\\u products函数中过滤出可变的销售产品。我尝试过使用meta\\u查询,但这似乎只适用于简单的产品。

我还尝试使用默认的WooCommerce短代码来实现这一点,如下所示:

echo do_shortcode(\'[recent_products per_page="16" orderby="date" paginate="true" on_sale="false"]\');
不幸的是,on\\u sale=”很遗憾;“错误”;似乎不支持。

有人能帮我吗?

谢谢

1 个回复
最合适的回答,由SO网友:DeltaG 整理而成

好吧,经过一番挖掘,我终于找到了我一直在寻找的答案。原来有一个函数wc_get_product_ids_on_sale() 您可以使用从中排除这些IDwc_get_products.

所以对于任何有同样问题的人。。您可以使用\'exclude\' => wc_get_product_ids_on_sale() 在您的wp\\u get\\u products args中,一切就绪!