woocommerce-offtopic – Obtener la lista de productos de un ID de categoría determinado

Pregunta:

No pude encontrar la manera correcta de obtener la lista de todos los productos para una ID de categoría determinada (no el nombre de la categoría).

El código que estoy usando para obtener la lista de categorías es el siguiente, funciona bien:

$args = array(
           'orderby'    => $orderby,
           'order'      => $order,
           'hide_empty' => 0,
           'include'    => $ids,
           'parent'    => 0,
     ); 

$categories = get_terms( 'product_cat', $args );

Sin embargo, ahora para una ID de categoría determinada (digamos 47), no pude encontrar la manera de obtener sus productos relevantes. Intenté de la siguiente manera:

$args = array( 
    'posts_per_page' => 5,
    'offset'=> 1,
    'category' => 47
 );

$products = get_posts( $args );
echo var_dump($products);

La depuración de la matriz de $products siempre devuelve 0, lo cual es incorrecto, ya que sé que hay algunos productos en la categoría con ID 47. ¿Alguna idea de cómo arreglar mi código?

Respuesta:

Sospecho que el problema principal es que debería usar el objeto WP_Query lugar de get_posts() . El último, de forma predeterminada, solo devuelve artículos con un tipo de post de post no productos,

Entonces, dada una categoría con ID 26, el siguiente código devolvería sus productos (WooCommerce 3+):

    $args = array(
    'post_type'             => 'product',
    'post_status'           => 'publish',
    'ignore_sticky_posts'   => 1,
    'posts_per_page'        => '12',
    'tax_query'             => array(
        array(
            'taxonomy'      => 'product_cat',
            'field' => 'term_id', //This is optional, as it defaults to 'term_id'
            'terms'         => 26,
            'operator'      => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
        ),
        array(
            'taxonomy'      => 'product_visibility',
            'field'         => 'slug',
            'terms'         => 'exclude-from-catalog', // Possibly 'exclude-from-search' too
            'operator'      => 'NOT IN'
        )
    )
);
$products = new WP_Query($args);
var_dump($products);

En versiones anteriores de WooCommerce, la visibilidad se almacenaba como un metacampo, por lo que el código sería:

    $args = array(
    'post_type'             => 'product',
    'post_status'           => 'publish',
    'ignore_sticky_posts'   => 1,
    'posts_per_page'        => '12',
    'meta_query'            => array(
        array(
            'key'           => '_visibility',
            'value'         => array('catalog', 'visible'),
            'compare'       => 'IN'
        )
    ),
    'tax_query'             => array(
        array(
            'taxonomy'      => 'product_cat',
            'field' => 'term_id', //This is optional, as it defaults to 'term_id'
            'terms'         => 26,
            'operator'      => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
        )
    )
);
$products = new WP_Query($args);
var_dump($products);

Aquí solo devolvemos productos visibles, 12 por página.

Eche un vistazo a http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters para obtener más detalles sobre cómo funciona la segmentación por categoría; ¡a menudo es más útil recuperarla por slug que por ID!

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım