Obtener productos con atributo específico y en categoría - WooCommerce

7 jul 2017, 13:08:08
Vistas: 26.6K
Votos: 2

Estoy tratando de obtener una lista/contador de productos que tienen un atributo y valor específico. Los productos se gestionan y configuran usando el plugin WooCommerce.

Cada producto tiene el mismo conjunto de variaciones, el producto está asignado a una categoría, necesito recuperar solo los productos con un atributo específico, por ejemplo "newyork" y la cantidad en stock que sea menor que, por ejemplo, "20".

Cada variación del producto está configurada con Stock Gestionado, pero no el producto en sí, espero que tenga sentido. Mi problema en este momento es que la consulta de WordPress que tengo no está verificando el nombre de la variación ni el stock en absoluto.

Cualquier ayuda sería apreciada.

<?php 

$args = array(
  'post_type'           => array('product', 'product_variation'),
  'post_status'         => 'publish',
  'posts_per_page'      => -1,
  'meta_query'          => array(
    array(
      'key'         => '_stock',
      'value'       => 20,
      'compare'     => '<'
    )
  ),
  'tax_query'           => array(
    array(
      'taxonomy'        => 'product_cat',
      'field'           => 'slug',
      'terms'           => array('cat1', 'cat2', 'cat3'),
      'operator'        => 'IN',
    ),
    array(
      'taxonomy'        => 'pa_regions',
      'field'           => 'slug',
      'terms'           => 'newyork',
      'operator'        => 'IN'
    ),

  )
);

$loop = new WP_Query($args);
$post_count = array();

while($loop->have_posts()) : $loop->the_post();
  global $product; ?>

  <pre style="background: #1c1c1b; color: #f7e700">
    <?php $post_count[] = $product->ID ;?>
  </pre>

<?php endwhile; ?>

$total = count($post_count); 
0
Todas las respuestas a la pregunta 2
0

Deberías usar wc_get_products con un filtro personalizado para agregar tu consulta específica.

Ejemplo

Quiero encontrar productos que contengan un valor de atributo específico "table-filter".

  $args = array(
            'table-filter' => array(1,2,3)
        );
  $products = wc_get_products($args);

Luego tengo un filtro para esto:

add_filter('woocommerce_product_data_store_cpt_get_products_query', 'my_handle_custom_query_var', 10, 2);

function my_handle_custom_query_var($query, $query_vars) {
    if (!empty($query_vars['table-filter'])) {
        $query['tax_query'][] = array(
            'taxonomy' => 'pa_table-filter',
            'field'    => 'term_id', //por defecto
            'terms'    => $query_vars['table-filter'],
            'operator' => 'IN',
        );
    }
    return $query;
}

Nota: La taxonomía de atributo generada por WooCommerce siempre tiene el prefijo "pa_", así que si tu slug de atributo es "table-filter", la taxonomía será "pa_table-filter".

26 abr 2018 10:11:41
0
-1

Creo que tienes un problema con 'tax_query'. Si quieres usar un array en 'tax_query', necesitas seguir el formato de WordPress.

Una breve explicación para ti: en 'tax_query' necesitas 'relation':

 'tax_query'           => array(
   'relation'=>'AND', // 'AND' 'OR' ...
    array(
      'taxonomy'        => 'product_cat',
      'field'           => 'slug',
      'terms'           => array('cat1', 'cat2', 'cat3'),
      'operator'        => 'IN',
    ),
    array(
      'taxonomy'        => 'pa_regions',
      'field'           => 'slug',
      'terms'           => 'newyork',
      'operator'        => 'IN'
    )
24 ene 2018 06:07:28