Obtener todos los productos con un atributo personalizado

29 jun 2015, 10:46:31
Vistas: 14.1K
Votos: 5

Quiero hacer una consulta personalizada para obtener todos los productos con un atributo específico ("demo" en mi caso). La consulta que quiero debería devolver esto:

a:5:{s:4:"demo";
a:6:{s:4:"name";
    s:4:"DEMO";
    s:5:"value";
    s:366:"ENLACE AL DEMO";
    s:8:"position";
    s:1:"0";
    s:10:"is_visible";
    i:0;
    s:12:"is_variation";
    i:0;
    s:11:"is_taxonomy";
    i:0;
}

}

No sé cómo hacer un $args para obtener los productos. Quiero que $args sea algo así:

    $args = array ( 
         'meta_query' => array( 
             array( 
              'key' => 'meta_value', 
              'value' => 'demo', 
              'compare' => 'LIKE', ), 
           ), 
   );

¡Gracias!

0
Todas las respuestas a la pregunta 4
6

Has escrito key como meta_value. Debería ser el nombre de tu meta. El nombre que le has dado a tus campos personalizados o meta. Luego usa la siguiente consulta.

$args = array ( 
         'post_type'  => 'your-post-type',
         'posts_per_page'  => -1,
         'meta_query' => array( 
             array( 
              'key' => 'demo', 
              'value' => '',
              'compare' => '!='
             ), 
           ), 
   );

Por defecto, el compare está establecido en =

29 jun 2015 10:57:48
Comentarios

Gracias, quiero obtener todos los productos que tengan un atributo llamado 'demo', no necesito obtener el valor porque el campo del valor será un enlace. De cualquier forma, ¡gracias!

C.B. C.B.
29 jun 2015 11:37:49

@user2879109 Actualicé el código. Por favor verifícalo

Karun Karun
29 jun 2015 11:49:05

No, lo intenté y no funciona para mí. En mi wp_postmeta.meta_value tengo esto:

a:5:{ s:4:"demo"; a:6:{s:4:"name"; s:4:"DEMO"; s:5:"value"; s:366:"LINK TO DEMO"; s:8:"position"; s:1:"0"; s:10:"is_visible"; i:0; s:12:"is_variation"; i:0; s:11:"is_taxonomy"; i:0; } ... más atributos }

C.B. C.B.
29 jun 2015 12:06:45

en cualquiera de tus publicaciones donde tengas esa clave demo. ¿Puedes hacer un get_post_meta(get_the_ID()); y mostrar el array devuelto?

Karun Karun
29 jun 2015 12:14:23

¡Lo conseguí, gracias por tu ayuda! Escribí el código de abajo

C.B. C.B.
29 jun 2015 12:20:46

el meta_key que almacena los atributos de woocommerce es '_product_attributes'. Aún no hay una forma específica de buscar productos basados en atributos personalizados del producto.

gmatta gmatta
17 ago 2016 09:27:53
Mostrar los 1 comentarios restantes
1

¡OK, YA LO TENGO!! ¡yuhuuu!

¡Muchas gracias chicos!

Tengo esto:

$args = array ( 
     'post_type'  => 'product',
     'posts_per_page'  => -1,
     'meta_query' => array( 
         array( 
          'value' => 'demo', 
          'compare' => 'like'
         ), 
       ),
     ); 

Bueno, esto funciona al menos para mí

¡Gracias gracias!!

¡Saludos cordiales!

29 jun 2015 12:13:40
Comentarios

Solo para alguien que busque una solución similar, este código no funcionará en la mayoría de los casos. Podría haber funcionado para una situación específica.

gmatta gmatta
17 ago 2016 09:26:28
4

prueba algo como esto

$args = array(
    "post_type" => "product",
    "meta_query" => array(
        array(
            "key"     => "demo",
            "value" => "abc",
            "compare" => "EXISTS",
        ),
    ),
);
$query = new WP_Query( $args );
29 jun 2015 10:56:43
Comentarios

Gracias pero sigo obteniendo 0 resultados

C.B. C.B.
29 jun 2015 11:36:06

agrega "value" => "abc", junto a "key" y "compare". la documentación menciona un posible bug pero no está claro para mí si necesitas "value" o no (modifiqué el código anterior)

mmm mmm
29 jun 2015 12:02:05

¡Lo conseguí, tu código y el código de karun ayudaron mucho! Gracias.

C.B. C.B.
29 jun 2015 12:19:06

El meta_key que almacena los atributos de woocommerce es '_product_attributes'. Aún así no hay una forma específica de buscar productos basados en atributos personalizados de producto.

gmatta gmatta
17 ago 2016 09:31:12
0

Sé que esto es antiguo, pero con SQL directo, aquí están mis soluciones:

Obtener todos los metadatos de un producto:

SELECT meta_key, meta_value FROM wp_postmeta WHERE wp_postmeta.post_id = 626

Obtener productos con metadatos específicos

SELECT p.id, p.post_title, m.meta_key, m.meta_value FROM wp_posts p 
INNER JOIN wp_postmeta m ON p.id=m.post_id AND m.meta_key='_auction_dates_to' 

AGREGAR PARA OBTENER METADATOS DE UN PRODUCTO ESPECÍFICO

AND p.id=626

Agregar para obtener un valor meta específico

AND m.meta_value='today'
14 dic 2018 16:56:58