• Resolved rayuaz

    (@rayuaz)


    I recently installed ElasticPress on my woocommerce store, and it’s working fine — the product page is showing normally, and the search bar is working fine with the new elastic capabilities. However, when I try to use the product filters, nothing shows up, the query simply doesn’t work. If I deactivate Elasticpress, however, the filters work normally. This is the query:

    Codeshare link for better readability.

    <?php
    
    defined( 'ABSPATH' ) || exit;
    
    global $wp_query;
    
    add_action( 'woocommerce_product_query', 'tpk_archive_query' );
    
    function tpk_archive_query( $q ){
    
        if($_GET['js'] == 'y') {
            $cat = explode(',', esc_attr($_GET['categorias']));
            $a = explode(',', esc_attr($_GET['artistas']));
            $ta = explode(',', esc_attr($_GET['tamanhos']));
            $c = explode(',', esc_attr($_GET['colecoes']));
            $t = explode(',', esc_attr($_GET['tags']));
            $preco = explode(',', esc_attr($_GET['preco']));
            $operador = strtoupper(esc_attr($_GET['op']));
            $orderby = explode('-', esc_attr($_GET['orderby']));
        } else {
            $cat = esc_attr($_GET['cat']);
            $a = esc_attr($_GET['a']);
            $ta = esc_attr($_GET['ta']);
            $c = esc_attr($_GET['c']);
            $t = esc_attr($_GET['t']);
        }
    
        if((esc_attr($_GET['orderby']) && !empty(esc_attr($_GET['orderby'])))) {
    
            if($orderby[0] == 'preco') {
    
                $q->set('orderby', 'meta_value_num');
                $q->set('meta_key', '_price');
                $q->set('order', $orderby[1]);
    
            } else {
    
                $q->set('orderby', $orderby[0]);
                $q->set('order', $orderby[1]);
    
            }
    
        }
    
        $args = [
            'relation' => 'AND',
        ];
    
        if((esc_attr($_GET['cat']) && !empty(esc_attr($_GET['cat'])))) {
            
            $category = [
                'taxonomy' => 'product_cat',
                'field' => 'slug',
                'terms' => $cat,
                'operator' => 'IN'
            ];
    
            array_push($args, $category);
        } elseif(esc_attr($_GET['categorias']) && !empty(esc_attr($_GET['categorias']))) {
    
            if(in_array('kits', $cat)) {
    
                $categorias = ['relation' => 'OR',];
    
                foreach ($cat as $cate) {
    
                    if($cate != 'kits') {
    
                        $kitCat = 'kits-' . $cate;
    
                        $cate = [$cate, $kitCat];
    
                        $pima = [
                            'taxonomy' => 'product_cat',
                            'field' => 'slug',
                            'terms' => $cate,
                            'operator' => 'IN'
                        ];
                        
                        array_push($categorias, $pima);
    
                    }
    
                }
    
            } else {
    
                $categorias = [
                    'taxonomy' => 'product_cat',
                    'field' => 'slug',
                    'terms' => $cat,
                    'operator' => 'IN'
                ];
    
            }
    
            array_push($args, $categorias);
    
        }
    
        if((esc_attr($_GET['a']) && !empty(esc_attr($_GET['a']))) || (esc_attr($_GET['artistas']) && !empty(esc_attr($_GET['artistas'])))) {
            $artistas = [
                'taxonomy' => 'autor',
                'field' => 'slug',
                'terms' => $a,
                'operator' => 'IN'
            ];
    
            array_push($args, $artistas);
        }
    
        if((esc_attr($_GET['ta']) && !empty(esc_attr($_GET['ta']))) || (esc_attr($_GET['tamanhos']) && !empty(esc_attr($_GET['tamanhos'])))) {
            $tamanho = [
                'taxonomy' => 'tamanho',
                'field' => 'slug',
                'terms' => $ta,
                'operator' => 'IN'
            ];
    
            array_push($args, $tamanho);
        }
    
        if((esc_attr($_GET['c']) && !empty(esc_attr($_GET['c']))) || (esc_attr($_GET['colecoes']) && !empty(esc_attr($_GET['colecoes'])))) {
            $colecao = [
                'taxonomy' => 'colecao',
                'field' => 'slug',
                'terms' => $c,
                'operator' => 'IN'
            ];
    
            array_push($args, $colecao);
        }
    
        if((esc_attr($_GET['t']) && !empty(esc_attr($_GET['t']))) || (esc_attr($_GET['tags']) && !empty(esc_attr($_GET['tags'])))) {
            
            if(!$operador) {
                $operador = 'OR';
            }
            $tags = ['relation' => $operador,];
    
            foreach ($t as $tag) {
                $poma = [
                    'taxonomy' => 'product_tag',
                    'field' => 'slug',
                    'terms' => $tag,
                    'operator' => 'IN'
                ];
                
                array_push($tags, $poma);
            }
    
            array_push($args, $tags);
        }
    
        $q->set('tax_query', $args);
    
        if((esc_attr($_GET['preco']) && !empty(esc_attr($_GET['preco'])))) {
    
            $min_price = $preco[0];
            $max_price = $preco[1];
    
            $q->set('meta_query', [
                [
                    'key' => '_price',
                    'value' => [$min_price, $max_price],
                    'compare' => 'BETWEEN',
                    'type' => 'NUMERIC'
                ]
            ]);
    
        }
    
    }

    I tried using WP Marvelous Debug to see if there were any errors happening during the query, and it didn’t point at anything different. The only “errors” it pointed out were these undefined indexes, which I don’t belive have anything to do with the problem, because they happen with or without Elastic.

    This is the “Query Args” on the ElasticPress debugger:

    array(72) {
    ["orderby"]=>
    string(28) "meta.total_sales.double date"
    ["post_type"]=>
    string(7) "product"
    ["error"]=>
    string(0) ""
    ["m"]=>
    string(0) ""
    ["p"]=>
    int(0)
    ["post_parent"]=>
    string(0) ""
    ["subpost"]=>
    string(0) ""
    ["subpost_id"]=>
    string(0) ""
    ["attachment"]=>
    string(0) ""
    ["attachment_id"]=>
    int(0)
    ["name"]=>
    string(0) ""
    ["pagename"]=>
    string(0) ""
    ["page_id"]=>
    int(0)
    ["second"]=>
    string(0) ""
    ["minute"]=>
    string(0) ""
    ["hour"]=>
    string(0) ""
    ["day"]=>
    int(0)
    ["monthnum"]=>
    int(0)
    ["year"]=>
    int(0)
    ["w"]=>
    int(0)
    ["category_name"]=>
    string(0) ""
    ["tag"]=>
    string(0) ""
    ["cat"]=>
    string(0) ""
    ["tag_id"]=>
    string(0) ""
    ["author"]=>
    string(0) ""
    ["author_name"]=>
    string(0) ""
    ["feed"]=>
    string(0) ""
    ["tb"]=>
    string(0) ""
    ["paged"]=>
    int(0)
    ["meta_key"]=>
    string(0) ""
    ["meta_value"]=>
    string(0) ""
    ["preview"]=>
    string(0) ""
    ["s"]=>
    string(0) ""
    ["sentence"]=>
    string(0) ""
    ["title"]=>
    string(0) ""
    ["fields"]=>
    string(0) ""
    ["menu_order"]=>
    string(0) ""
    ["embed"]=>
    string(0) ""
    ["category__in"]=>
    array(0) {
    }
    ["category__not_in"]=>
    array(0) {
    }
    ["category__and"]=>
    array(0) {
    }
    ["post__in"]=>
    array(0) {
    }
    ["post__not_in"]=>
    array(0) {
    }
    ["post_name__in"]=>
    array(0) {
    }
    ["tag__in"]=>
    array(0) {
    }
    ["tag__not_in"]=>
    array(0) {
    }
    ["tag__and"]=>
    array(0) {
    }
    ["tag_slug__in"]=>
    array(0) {
    }
    ["tag_slug__and"]=>
    array(0) {
    }
    ["post_parent__in"]=>
    array(0) {
    }
    ["post_parent__not_in"]=>
    array(0) {
    }
    ["author__in"]=>
    array(0) {
    }
    ["author__not_in"]=>
    array(0) {
    }
    ["order"]=>
    string(4) "DESC"
    ["meta_query"]=>
    array(0) {
    }
    ["tax_query"]=>
    array(2) {
        ["relation"]=>
        string(3) "AND"
        [0]=>
        array(4) {
        ["taxonomy"]=>
        string(5) "autor"
        ["field"]=>
        string(4) "slug"
        ["terms"]=>
        array(1) {
            [0]=>
            string(12) "arcane-minis"
        }
        ["operator"]=>
        string(2) "IN"
        }
    }
    ["wc_query"]=>
    string(13) "product_query"
    ["posts_per_page"]=>
    int(48)
    ["ep_integrate"]=>
    bool(true)
    ["ep_facet"]=>
    bool(true)
    ["aggs"]=>
    array(3) {
        ["name"]=>
        string(5) "terms"
        ["use-filter"]=>
        bool(true)
        ["aggs"]=>
        array(12) {
        ["category"]=>
        array(1) {
            ["terms"]=>
            array(2) {
            ["size"]=>
            int(10000)
            ["field"]=>
            string(19) "terms.category.slug"
            }
        }
        ["post_tag"]=>
        array(1) {
            ["terms"]=>
            array(2) {
            ["size"]=>
            int(10000)
            ["field"]=>
            string(19) "terms.post_tag.slug"
            }
        }
        ["post_format"]=>
        array(1) {
            ["terms"]=>
            array(2) {
            ["size"]=>
            int(10000)
            ["field"]=>
            string(22) "terms.post_format.slug"
            }
        }
        ["product_cat"]=>
        array(1) {
            ["terms"]=>
            array(2) {
            ["size"]=>
            int(10000)
            ["field"]=>
            string(22) "terms.product_cat.slug"
            }
        }
        ["product_tag"]=>
        array(1) {
            ["terms"]=>
            array(2) {
            ["size"]=>
            int(10000)
            ["field"]=>
            string(22) "terms.product_tag.slug"
            }
        }
        ["product_shipping_class"]=>
        array(1) {
            ["terms"]=>
            array(2) {
            ["size"]=>
            int(10000)
            ["field"]=>
            string(33) "terms.product_shipping_class.slug"
            }
        }
        ["autor"]=>
        array(1) {
            ["terms"]=>
            array(2) {
            ["size"]=>
            int(10000)
            ["field"]=>
            string(16) "terms.autor.slug"
            }
        }
        ["colecao"]=>
        array(1) {
            ["terms"]=>
            array(2) {
            ["size"]=>
            int(10000)
            ["field"]=>
            string(18) "terms.colecao.slug"
            }
        }
        ["tamanho"]=>
        array(1) {
            ["terms"]=>
            array(2) {
            ["size"]=>
            int(10000)
            ["field"]=>
            string(18) "terms.tamanho.slug"
            }
        }
        ["ep_custom_result"]=>
        array(1) {
            ["terms"]=>
            array(2) {
            ["size"]=>
            int(10000)
            ["field"]=>
            string(27) "terms.ep_custom_result.slug"
            }
        }
        ["pa_material"]=>
        array(1) {
            ["terms"]=>
            array(2) {
            ["size"]=>
            int(10000)
            ["field"]=>
            string(22) "terms.pa_material.slug"
            }
        }
        ["pa_variacao"]=>
        array(1) {
            ["terms"]=>
            array(2) {
            ["size"]=>
            int(10000)
            ["field"]=>
            string(22) "terms.pa_variacao.slug"
            }
        }
        }
    }
    ["suppress_filters"]=>
    bool(false)
    ["ignore_sticky_posts"]=>
    bool(false)
    ["cache_results"]=>
    bool(true)
    ["update_post_term_cache"]=>
    bool(true)
    ["lazy_load_term_meta"]=>
    bool(true)
    ["update_post_meta_cache"]=>
    bool(true)
    ["nopaging"]=>
    bool(false)
    ["comments_per_page"]=>
    string(2) "30"
    ["no_found_rows"]=>
    bool(false)
    ["taxonomy"]=>
    string(5) "autor"
    ["term"]=>
    string(12) "arcane-minis"
    }

    Do I have to re-write my queries in an elastic-specific syntax? I spent the last two days trying to fix this and I really have no idea what to do.

    Thanks in advance for any help.

    –EDIT

    In case this is helpful: this is the generated query without any filters active (just the default woocommerce query, which works without any problems):

    {
    "query": {
        "post_type": "product"
    },
    "query_vars": {
        "post_type": "product",
        "error": "",
        "m": "",
        "p": 0,
        "post_parent": "",
        "subpost": "",
        "subpost_id": "",
        "attachment": "",
        "attachment_id": 0,
        "name": "",
        "pagename": "",
        "page_id": 0,
        "second": "",
        "minute": "",
        "hour": "",
        "day": 0,
        "monthnum": 0,
        "year": 0,
        "w": 0,
        "category_name": "",
        "tag": "",
        "cat": "",
        "tag_id": "",
        "author": "",
        "author_name": "",
        "feed": "",
        "tb": "",
        "paged": 0,
        "meta_key": "",
        "meta_value": "",
        "preview": "",
        "s": "",
        "sentence": "",
        "title": "",
        "fields": "",
        "menu_order": "",
        "embed": "",
        "category__in": [],
        "category__not_in": [],
        "category__and": [],
        "post__in": [],
        "post__not_in": [],
        "post_name__in": [],
        "tag__in": [],
        "tag__not_in": [],
        "tag__and": [],
        "tag_slug__in": [],
        "tag_slug__and": [],
        "post_parent__in": [],
        "post_parent__not_in": [],
        "author__in": [],
        "author__not_in": [],
        "orderby": "popularity",
        "order": "ASC",
        "meta_query": [],
        "tax_query": {
        "relation": "AND"
        },
        "wc_query": "product_query",
        "posts_per_page": 48
    },
    "tax_query": {
        "queries": [],
        "relation": "AND",
        "queried_terms": [],
        "primary_table": null,
        "primary_id_column": null
    },
    "meta_query": false,
    "date_query": false,
    "post_count": 0,
    "current_post": -1,
    "in_the_loop": false,
    "comment_count": 0,
    "current_comment": -1,
    "found_posts": 0,
    "max_num_pages": 0,
    "max_num_comment_pages": 0,
    "is_single": false,
    "is_preview": false,
    "is_page": false,
    "is_archive": true,
    "is_date": false,
    "is_year": false,
    "is_month": false,
    "is_day": false,
    "is_time": false,
    "is_author": false,
    "is_category": false,
    "is_tag": false,
    "is_tax": false,
    "is_search": false,
    "is_feed": false,
    "is_comment_feed": false,
    "is_trackback": false,
    "is_home": false,
    "is_privacy_policy": false,
    "is_404": false,
    "is_embed": false,
    "is_paged": false,
    "is_admin": false,
    "is_attachment": false,
    "is_singular": false,
    "is_robots": false,
    "is_favicon": false,
    "is_posts_page": false,
    "is_post_type_archive": true,
    "thumbnails_cached": false
    }

    This is the generated query when I set the “autor” filter as “Arcane Minis”, and the “orderby” to “popularity”:

    {
    "query": {
        "orderby": "",
        "post_type": "product"
    },
    "query_vars": {
        "orderby": "popularity",
        "post_type": "product",
        "error": "",
        "m": "",
        "p": 0,
        "post_parent": "",
        "subpost": "",
        "subpost_id": "",
        "attachment": "",
        "attachment_id": 0,
        "name": "",
        "pagename": "",
        "page_id": 0,
        "second": "",
        "minute": "",
        "hour": "",
        "day": 0,
        "monthnum": 0,
        "year": 0,
        "w": 0,
        "category_name": "",
        "tag": "",
        "cat": "",
        "tag_id": "",
        "author": "",
        "author_name": "",
        "feed": "",
        "tb": "",
        "paged": 0,
        "meta_key": "",
        "meta_value": "",
        "preview": "",
        "s": "",
        "sentence": "",
        "title": "",
        "fields": "",
        "menu_order": "",
        "embed": "",
        "category__in": [],
        "category__not_in": [],
        "category__and": [],
        "post__in": [],
        "post__not_in": [],
        "post_name__in": [],
        "tag__in": [],
        "tag__not_in": [],
        "tag__and": [],
        "tag_slug__in": [],
        "tag_slug__and": [],
        "post_parent__in": [],
        "post_parent__not_in": [],
        "author__in": [],
        "author__not_in": [],
        "order": "ASC",
        "meta_query": [],
        "tax_query": {
        "0": {
            "taxonomy": "autor",
            "field": "slug",
            "terms": [
            "arcane-minis"
            ],
            "operator": "IN"
        },
        "relation": "AND"
        },
        "wc_query": "product_query",
        "posts_per_page": 48
    },
    "tax_query": {
        "queries": [],
        "relation": "AND",
        "queried_terms": [],
        "primary_table": null,
        "primary_id_column": null
    },
    "meta_query": false,
    "date_query": false,
    "post_count": 0,
    "current_post": -1,
    "in_the_loop": false,
    "comment_count": 0,
    "current_comment": -1,
    "found_posts": 0,
    "max_num_pages": 0,
    "max_num_comment_pages": 0,
    "is_single": false,
    "is_preview": false,
    "is_page": false,
    "is_archive": true,
    "is_date": false,
    "is_year": false,
    "is_month": false,
    "is_day": false,
    "is_time": false,
    "is_author": false,
    "is_category": false,
    "is_tag": false,
    "is_tax": false,
    "is_search": false,
    "is_feed": false,
    "is_comment_feed": false,
    "is_trackback": false,
    "is_home": false,
    "is_privacy_policy": false,
    "is_404": false,
    "is_embed": false,
    "is_paged": false,
    "is_admin": false,
    "is_attachment": false,
    "is_singular": false,
    "is_robots": false,
    "is_favicon": false,
    "is_posts_page": false,
    "is_post_type_archive": true,
    "thumbnails_cached": false
    }

    And lastly, this is the filtered query without elastic press:

    {
    "query": {
        "orderby": "",
        "post_type": "product"
    },
    "query_vars": {
        "orderby": "popularity",
        "post_type": "product",
        "error": "",
        "m": "",
        "p": 0,
        "post_parent": "",
        "subpost": "",
        "subpost_id": "",
        "attachment": "",
        "attachment_id": 0,
        "name": "",
        "pagename": "",
        "page_id": 0,
        "second": "",
        "minute": "",
        "hour": "",
        "day": 0,
        "monthnum": 0,
        "year": 0,
        "w": 0,
        "category_name": "",
        "tag": "",
        "cat": "",
        "tag_id": "",
        "author": "",
        "author_name": "",
        "feed": "",
        "tb": "",
        "paged": 0,
        "meta_key": "",
        "meta_value": "",
        "preview": "",
        "s": "",
        "sentence": "",
        "title": "",
        "fields": "",
        "menu_order": "",
        "embed": "",
        "category__in": [],
        "category__not_in": [],
        "category__and": [],
        "post__in": [],
        "post__not_in": [],
        "post_name__in": [],
        "tag__in": [],
        "tag__not_in": [],
        "tag__and": [],
        "tag_slug__in": [],
        "tag_slug__and": [],
        "post_parent__in": [],
        "post_parent__not_in": [],
        "author__in": [],
        "author__not_in": [],
        "order": "ASC",
        "meta_query": [],
        "tax_query": {
        "0": {
            "taxonomy": "autor",
            "field": "slug",
            "terms": [
            "arcane-minis"
            ],
            "operator": "IN"
        },
        "relation": "AND"
        },
        "wc_query": "product_query",
        "posts_per_page": 48
    },
    "tax_query": {
        "queries": [],
        "relation": "AND",
        "queried_terms": [],
        "primary_table": null,
        "primary_id_column": null
    },
    "meta_query": false,
    "date_query": false,
    "post_count": 0,
    "current_post": -1,
    "in_the_loop": false,
    "comment_count": 0,
    "current_comment": -1,
    "found_posts": 0,
    "max_num_pages": 0,
    "max_num_comment_pages": 0,
    "is_single": false,
    "is_preview": false,
    "is_page": false,
    "is_archive": true,
    "is_date": false,
    "is_year": false,
    "is_month": false,
    "is_day": false,
    "is_time": false,
    "is_author": false,
    "is_category": false,
    "is_tag": false,
    "is_tax": false,
    "is_search": false,
    "is_feed": false,
    "is_comment_feed": false,
    "is_trackback": false,
    "is_home": false,
    "is_privacy_policy": false,
    "is_404": false,
    "is_embed": false,
    "is_paged": false,
    "is_admin": false,
    "is_attachment": false,
    "is_singular": false,
    "is_robots": false,
    "is_favicon": false,
    "is_posts_page": false,
    "is_post_type_archive": true,
    "thumbnails_cached": false
    }
    • This topic was modified 4 years, 1 month ago by rayuaz.
    • This topic was modified 4 years, 1 month ago by rayuaz. Reason: Added the json query args

    The page I need help with: [log in to see the link]

Viewing 1 replies (of 1 total)
  • Plugin Contributor vhauri

    (@vhauri)

    Hi @rayuaz,

    Can you share this bug report on the Github issues list for ElasticPress, as we don’t provide support here?

    I’d also install the Debug Bar and Debug Bar ElasticPress plugins and share any queries in their JSON format as they’re being sent to ElasticPress. You might see an error message there that explains why the queries aren’t properly returning results.

Viewing 1 replies (of 1 total)
  • The topic ‘ElasticPress is (apparently) messing with my search filters’ is closed to new replies.