WC_Product_Query不适用于have_posts()

时间:2019-02-24 16:13:06

标签: wordpress loops woocommerce product

我正尝试遍历我的WooCommerce产品,就像使用“自定义帖子类型”一样。但是由于某种原因,该方法无法正常工作。我收到与have_posts()有关的错误。我在做什么错了?

错误

  

未捕获的错误:在数组上调用成员函数have_posts()

我的代码

<?php
 $query = new WC_Product_Query( array(
     'limit' => 10,
     'orderby' => 'date',
     'order' => 'DESC'
 ) );

 $products = $query->get_products();

 if( $products->have_posts() ) {
    while( $products->have_posts() ) {
      $products->the_post();
      echo the_permalink();
    }
} ?>

更新

我发现使用foreach循环的工作原理如下:

<?php
foreach( $products as $product ) {
    echo $product->get_title();
} ?>

但是我仍然想了解为什么此方法不适用于have_posts()

2 个答案:

答案 0 :(得分:6)

$query = new WC_Product_Query(array(
    'limit' => 10,
    'orderby' => 'date',
    'order' => 'DESC'
        ));

$products = $query->get_products();

if (!empty($products)) {
    foreach ($products as $product) {

        echo get_permalink($product->get_id());
    }
}

函数have_post()是WordPress WP_Query类的成员函数-WooCommerce WC_Product_Query类扩展了WC_Object_Query类,而不是WP_Query类-因此该函数不能被称为

答案 1 :(得分:1)

因为$ products是数组,所以您不能在其中某些项目上调用方法。如果您执行了$ products [0]-> have_posts(),它将起作用。