WC_Product_Query не работает с have_posts () - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь пройтись по моим продуктам WooCommerce, как если бы вы использовали пользовательские типы сообщений.Но по какой-то причине этот метод не работает.Я получаю сообщение об ошибке, которое связано со мной, используя have_posts().Что я делаю не так?

Ошибка

Uncaught Ошибка: вызов функции-члена 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 голосов
/ 27 февраля 2019
$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());
    }
}

function have_post() является функцией-членом класса WordPress WP_Query - и класс WooCommerce WC_Product_Query расширяет класс WC_Object_Query, а не WP_Query - поэтому эту функцию нельзя вызвать

0 голосов
/ 26 февраля 2019

Поскольку $ products является массивом, вы не можете вызывать в нем метод, просто для некоторого элемента.Если бы вы сделали $ products [0] -> have_posts (), это сработало бы.

...