WC_Product_Query no funciona con have_posts()

1 minuto de lectura

avatar de usuario
reece

Estoy tratando de recorrer mis productos de WooCommerce como lo haría con los tipos de publicaciones personalizadas. Pero por alguna razón, este método no funciona. Recibo un error que tiene que ver conmigo usando have_posts(). ¿Qué estoy haciendo mal?

Error

Error no detectado: llamada a una función miembro have_posts () en una matriz

Mi código

<?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();
    }
} ?>

Actualizar

Descubrí que usar un bucle foreach funciona de la siguiente manera;

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

Pero aún me gustaría entender por qué este método no funciona con have_posts()

  • uso sencillo WP_Query si quieres usar have_post con parámetros simples devueltos por la consulta y sin uso del objeto del producto allí.

    – Jaydip Nimavat

    2 de marzo de 2019 a las 6:49


avatar de usuario
solo muju

$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());
    }
}

función have_post() es una función miembro de WordPress WP_Query clase – y WooCommerce WC_Product_Query la clase se está extendiendo WC_Object_Query clase, no la WP_Query – Entonces esta función no puede ser llamada

Debido a que $products es una matriz, no puede llamar a un método en él, solo en algún elemento. Si hiciste $productos[0]->have_posts() funcionaría.

¿Ha sido útil esta solución?