¿Ejecutar un WP_Query grande con muchos "AND" Meta_Queries?

4

Tengo un tipo de publicación personalizado product . Los visitantes pueden buscar products con muchos filtros. Pueden establecer color , size , price , etc. Los detalles del producto se almacenan con Campos personalizados avanzados (ACF) .

Mi solución fue WP_Query con meta_queries . Todas las WP_Meta_Queries están en AND -relaciones.

Mi problema es: si el visitante crea más filtro para el producto, la consulta siempre será más lenta. Creo que el INNER JOIN s en wp_postmeta es el problema. Tengo seis INNER JOIN s en esta tabla.

¿Hay una solución para este problema?

    
pregunta poldixd 09.03.2015 - 12:27

2 respuestas

6

Es posible que necesite una solución de 180 ° aquí;) Piensa una vez más en el problema y prueba esto:

  

Como visitante puedo filtrar por color y tamaño.

Entonces tu solución podría ser:

...
JOIN ... (A)
... (B)
... (C)
WHERE (A.meta_key = 'color' AND A.meta_value = 'red')
OR (B.meta_key = 'color' AND B.meta_value = 'blue')
...
AND (C.meta_key = 'size' AND C.meta_value = 1)
...

Pero en realidad puedes soltar algunas combinaciones usando IN :

JOIN ... (A)
... (B)
WHERE (A.meta_key = 'color' AND A.meta_value IN ('red', 'yellow'))
AND (B.meta_key = 'size' AND B.meta_value IN (1, 2, 3))

Empiece a usar "IN" para comparar los valores como en el manual :

$args = array(
    'post_type'  => 'my_custom_post_type',
    'meta_key'   => 'age',
    'orderby'    => 'meta_value_num',
    'order'      => 'ASC',
    'meta_query' => array(
        array(
            'key'     => 'age',
            'value'   => array( 3, 4 ),
            'compare' => 'IN',
        ),
    ),
);
$query = new WP_Query( $args );

Incluso puedes comenzar a adivinar y tenerlo con solo una o ninguna combinación:

WHERE meta_key IN ('color', 'size')
  AND meta_value IN ('red', 'blue', 123, 45)

Esto sería rápido pero podría terminar en muchos falsos positivos.

    
respondido por el LeMike 09.03.2015 - 12:58
-1

si está utilizando woocommerce, simplemente puede usar los filtros de productos avanzados ajax

Este complemento te ayudará con todos los meta de publicación.

    
respondido por el Hari Om Gupta 09.03.2015 - 18:42

Lea otras preguntas en las etiquetas