Executar uma grande WP_Query com muitas Meta_Queries “AND”?

4

Eu tenho um tipo de postagem personalizado product . Os visitantes podem pesquisar products com muitos filtros. Eles podem definir o color , o size , o price , etc. Os detalhes do produto são armazenados com Advanced Custom Fields (ACF) .

Minha solução foi um WP_Query com meta_queries . Todos os WP_Meta_Queries estão em AND -relations.

Meu problema é: se o visitante criar mais filtros para o produto, a consulta sempre será mais lenta. Eu acho que o INNER JOIN s em wp_postmeta é o problema. Eu tenho seis INNER JOIN s nesta tabela.

Existe uma solução para este problema?

    
por poldixd 09.03.2015 / 12:27

2 respostas

6

Você pode precisar de uma solução de 180 ° aqui;) Pense no problema mais uma vez e tente isso:

  

Como visitante, posso filtrar por cor e tamanho.

Então, sua solução pode 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)
...

Mas, na verdade, você pode soltar algumas associações 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))

Então comece a usar "IN" para comparar valores como no 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 );

Você pode até começar a adivinhar e tê-lo com apenas uma ou nenhuma participação:

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

Isso seria rápido, mas pode acabar em muitos falsos positivos.

    
por LeMike 09.03.2015 / 12:58
-1

Se você estiver usando woocommerce, basta usar os filtros avançados de produtos ajax

Este plugin irá ajudá-lo com todas as postagens meta.

    
por Hari Om Gupta 09.03.2015 / 18:42