最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

How we filter the search base on post-meta tags

programmeradmin3浏览0评论

I am using my custom filter. So in this search there are many checkboxes (have city name) and user selected some of them the post show the search result base on the checkbox. First i sotre the city/state name by using the add_post_meta

add_post_meta($post_id, 'post_state' , $state, true);

So after that when user filter the post. i am using the code

if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'sortbydestination' ) :
$stateName = $_POST['stateName'];

unset($_POST);
endif;
$args = array(
            'posts_per_page' => 30,
            'paged' => $paged, 
            'post_type' => 'post', 
            'post_status' => 'publish',
            'meta_query' => array(
                            'key' => 'post_state',
                            'value' => array($stateName)

                            ) 
            );

The checkbox html is generated by jquery which is

jQuery('#state_div').append('<label><input type="checkbox" name="stateName['+ state_arr[x] +']" id="" value="'+ state_arr[x] +'" >' + state_arr[x] + '</label');

So the name of the input is a array it self, which give me values like this

stateName[cityname1];
stateName[cityname2];
stateName[cityname3];
stateName[cityname4];

and so on. So someone tell me wether i am using right way to get these data or make correct query or not. Thanks

I am using my custom filter. So in this search there are many checkboxes (have city name) and user selected some of them the post show the search result base on the checkbox. First i sotre the city/state name by using the add_post_meta

add_post_meta($post_id, 'post_state' , $state, true);

So after that when user filter the post. i am using the code

if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'sortbydestination' ) :
$stateName = $_POST['stateName'];

unset($_POST);
endif;
$args = array(
            'posts_per_page' => 30,
            'paged' => $paged, 
            'post_type' => 'post', 
            'post_status' => 'publish',
            'meta_query' => array(
                            'key' => 'post_state',
                            'value' => array($stateName)

                            ) 
            );

The checkbox html is generated by jquery which is

jQuery('#state_div').append('<label><input type="checkbox" name="stateName['+ state_arr[x] +']" id="" value="'+ state_arr[x] +'" >' + state_arr[x] + '</label');

So the name of the input is a array it self, which give me values like this

stateName[cityname1];
stateName[cityname2];
stateName[cityname3];
stateName[cityname4];

and so on. So someone tell me wether i am using right way to get these data or make correct query or not. Thanks

Share Improve this question edited Mar 27, 2013 at 13:30 Adi asked Mar 27, 2013 at 12:28 AdiAdi 3402 gold badges9 silver badges23 bronze badges 2
  • You comparison operator is =, yet you feed the metaquery an array as a value. That cannot work. Simply pass $stateName as a value. – Johannes P. Commented Mar 27, 2013 at 12:34
  • I did that to. I remove the 'compare' => '=' but it not working. It show me all the posts. so what can i do now – Adi Commented Mar 27, 2013 at 12:42
Add a comment  | 

1 Answer 1

Reset to default 0

Thats because you got the meta_query wrong. Check documentation in Codex

Your query should be:

$args = array(
            'posts_per_page' => 30,
            'paged' => $paged, 
            'post_type' => 'post', 
            'post_status' => 'publish',
            'meta_query' => array(
                                array(
                                 'key' => 'post_state',
                                 'value' => $stateName,
                                 'compare' => '=' // not necesary by default is "="
                                )
                            ) 
            );

Basically you need to pass inside the meta_query array, another array with the key and value. Also $stateName should be a var.

发布评论

评论列表(0)

  1. 暂无评论