Obtener productos por ID de categoría

2 minutos de lectura

avatar de usuario
Mostafa Ghanbari

Estoy escribiendo un complemento de tabla de precios para woocommerce. el usuario inserta el código abreviado con una identificación de la categoría de productos de woocommerce y, después de actualizar la página, el usuario puede ver una tabla con una lista de nombres y precios de productos.
¿Cómo puedo obtener una lista de productos con la identificación de su categoría?
en el código de abajo $pid es lo que el usuario escribe en shortcode, ‘objeto_id’ es la identificación de cada producto en la tabla wp_posts.

<?php
    $products = $wpdb->get_results("SELECT object_id FROM {$wpdb->term_relationships}
                                      WHERE term_taxonomy_id = " . $pid);
    if(!empty($products))
    {
        foreach($products as $product)
        {
            //the code
        }
    }
?>  

Gracias por adelantado.

avatar de usuario
príncipe singh

 $args = array(
    'post_status' => 'publish',
    'tax_query' => array(
         'taxonomy' => 'product_cat',
         'field'    => 'term_id',
         'terms'     =>  '[ category id here ]', // When you have more term_id's seperate them by komma.
         'operator'  => 'IN'
         )
    );
    $the_query = wp_query($args);

No probado pero debería funcionar

Según la documentación de Woocommerce WP_Query() o get_posts() No debería ser usado:

wc_get_products y WC_Product_Query brindan una forma estándar de recuperar productos que es segura de usar y no se romperá debido a cambios en la base de datos en futuras versiones de WooCommerce. Es probable que la creación de WP_Queries personalizadas o consultas de base de datos rompa su código en futuras versiones de WooCommerce a medida que los datos se mueven hacia tablas personalizadas para un mejor rendimiento. Esta es la forma de mejores prácticas para que los desarrolladores de complementos y temas recuperen múltiples productos. wc_get_products y WC_Product_Query son similares a WordPress get_posts y WP_Query. Al igual que esos, pasa una serie de argumentos que definen los criterios para la búsqueda.

Documentos de WooCommerce

Aquí está mi solución:

$product_term_ids = array(16,10,4,7);

$product_term_args = array(
    'taxonomy' => 'product_cat',
    'include' => $product_term_ids,
    'orderby'  => 'include'
);
$product_terms = get_terms($product_term_args);

$product_term_slugs = [];
foreach ($product_terms as $product_term) {
    $product_term_slugs[] = $product_term->slug;
}

$product_args = array(
    'post_status' => 'publish',
    'limit' => -1,
    'category' => $product_term_slugs,
    //more options according to wc_get_products() docs
);
$products = wc_get_products($product_args);

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

Nota: el argumento de categoría requiere una matriz de slugs, no ID.

(Probado y funciona con WordPress 5.9.3 y WooCommerce 6.4.1.)

Crédito: @Christian Lescuyer

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad