首页 > 解决方案 > Wordpress | Split queries based on selection

问题描述

I am implementing the filters for the content searched by users inside my ajax form in frontend, I am working with this query that works perfectly

$args =  array(
    'post_type' => 'pro',
    'posts_per_page' => -1,
    'meta_key'    => $_POST['categoryfilter'],
    'meta_query'  =>             array(
        'relation'  => 'AND',
        array(
            'key'     => $_POST['categoryfilter'],
            'value'   => 0,
            'compare' => '>=',
            'type'    => 'NUMERIC',
        ),
        array(
            'key'     => $_POST['categoryfilter'],
            'value'   => 100,
            'compare' => '<=',
            'type'    => 'NUMERIC',
        ),
    ),
    'orderby'    => 'meta_value_num',
    'order'       => $_POST['order'],
);

my goal was to split the query based on the $_POST of the filter on the form

and I wanted to get that when the user selected the filter: firts, I split the above query into this one to get this

   'meta_query'  => array(
        'relation'  => 'AND',
        array(
            'key'     => $_POST['categoryfilter'],
            'value'   => 0,
            'compare' => '>=',
            'type'    => 'NUMERIC',
        ),
        array(
            'key'     => $_POST['categoryfilter'],
            'value'   => 100,
            'compare' => '<=',
            'type'    => 'NUMERIC',
        ),
    ),

so i tried with this code but it doesn't work:

if( isset($_POST['first'] ))
        $args['meta_query'][] =
            array(
                'relation'  => 'AND',
                array(
                    'key'     => $_POST['categoryfilter'],
                    'value'   => 0,
                    'compare' => '>=',
                    'type'    => 'NUMERIC',
                ),
                array(
                    'key'     => $_POST['categoryfilter'],
                    'value'   => 50,
                    'compare' => '<=',
                    'type'    => 'NUMERIC',
                ),
            );

Where am I doing wrong?

same thing for sorting I would like when the user enters: order, be able to filter by ASC or DESC as in the first query

标签: phpwordpress

解决方案


I think it's just an issue with how you create the meta_query. You are storing it in a sub-array, but it should not. Try to update like this:

if( isset($_POST['first'] ))
        $args['meta_query'] =
            array(
                'relation'  => 'AND',
                array(
                    'key'     => $_POST['categoryfilter'],
                    'value'   => 0,
                    'compare' => '>=',
                    'type'    => 'NUMERIC',
                ),
                array(
                    'key'     => $_POST['categoryfilter'],
                    'value'   => 50,
                    'compare' => '<=',
                    'type'    => 'NUMERIC',
                ),
            );

When doing $args['meta_query'][] = you should push every array of the meta_query one by one, but here you already have the full meta_query. This assuming you don't have more code that could push more meta_queries rules. If so, then you should push each part at a time.


推荐阅读