Consultar productos de WooCommerce según el atributo

3 minutos de lectura

avatar de usuario
Ian Yates

Este me está volviendo loco. Estoy tratando de consultar y generar productos de WooCommerce en función de un atributo específico. Por ejemplo, configuré un atributo llamado oncon posibles valores de yes o no.

Consulto usando lo siguiente:

$args = array(  
   'post_type' => 'product',  
   'meta_key' => 'pa_on',  
   'meta_value' => 'yes',  
   'posts_per_page' => -1  
);  

query_posts($args);

los meta_key es crucial tal vez; si lo llamo on no consigo nada si lo llamo pa_on (porque así es como entiendo que se construyan los atributos personalizados de WooCommerce) No obtengo nada.

Sin embargo, si intento una consulta diferente y uso _featured, que es una meta cosita personalizada estándar de WooCommerce, devuelve las publicaciones destacadas relevantes. ¿Ayuda, alguien?

  • Parece fuera de los límites de StackOverflow. Esta no es una pregunta PHP explícita. Es específico de WordPress y, por lo tanto, la publicación debe migrarse a wordpress.stackexchange.com

    – Chris

    14/01/2014 a las 18:37


  • Gracias Chris. Lo dejaré colgado y si un moderador mueve el hilo, que así sea 🙂

    – Ian Yates

    15 de enero de 2014 a las 7:39

Sé que es antiguo, pero en caso de que alguien se tope con él como lo hice hoy, Woocommerce (estoy usando v2.6.2) parece almacenar estos atributos personalizados como taxonomías.

Sospecho que los argumentos correctos para la pregunta original se verían así:

  $args = array(
    'post_type' => 'product',
    'tax_query' => array(
      array(
        'taxonomy' => 'pa_on',
        'field'    => 'name',
        'terms'    => 'yes'
      )
    )
  );

Usando los valores apropiados para mi instalación, resolvió mi problema.

Para el nuevo uso de woocommerce:

$attribute="on";
$value="yes";
$args = array(
    'post_type' => 'product',
    'tax_query' => array(
    array(
        'taxonomy'      => 'pa_' . $attribute,
        'terms'         => $value,
        'field'         => 'slug',
        'operator'      => 'IN'
        )
    )
);

Si el atributo del producto se guarda como atributo de producto específico (es decir, no global), entonces no puede consultarlo como taxonomía, en su lugar puede usar este fragmento (copiado de http://snippet.fm/snippets/query-woocommerce-products-product-specific-custom-attribute/):

// Set custom attribute name and value to search for
$attribute_name="color";
$attribute_value="green";

$serialized_value = serialize( 'name' ) . serialize( $attribute_name ) . serialize( 'value' ) . serialize( $attribute_value ); // extended version: $serialized_value = serialize( $attribute_name ) . 'a:6:{' . serialize( 'name' ) . serialize( $attribute_name ) . serialize( 'value' ) . serialize( $attribute_value ) . serialize( 'position' );
$args = array(
    'post_type'      => 'product',
    'post_status'    => 'any',
    'posts_per_page' => -1,
    'orderby'        => 'title',
    'order'          => 'ASC',
    'meta_query' => array(
        array(
            'key'     => '_product_attributes',
            'value'   => $serialized_value,
            'compare' => 'LIKE',
        ),
    ),
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) {
    $loop->the_post();
    // do stuff here... e.g. get_the_ID()
}
wp_reset_postdata();

Supongo que lo que necesita es una consulta con el conjunto de valores meta_query:

$args = array(
'post_type' => 'product',
'meta_query' => array(
    array(
        'key' => 'pa_on',
        'value' => 'yes',
        'compare' => '='
    )
)
);
$query = new WP_Query( $args );

Puedes aprender más sobre ellos aquí:
http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

¿Ha sido útil esta solución?