Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I need to query post meta fields, filtered by a multi checkbox

(image)

Currently, the query works only with second parameter (People) when the form is submitted.

How can I filter with two parameters?

HTML (Form submit)

<input type="checkbox" id="inlineCheckbox1"  name="category[]" value="Planet">
<input type="checkbox" id="inlineCheckbox2" name="category[]" value="People">

PHP (Search)

                $category = $_GET['category'];

                $category_planet = $category[0];
                $category_people = $category[1];

                $argsearch      = array();                    
                $argsearch["post_type"] = "projects";
                $argsearch['showposts'] = -1;

                if( $advtext!="" ){
                    $advtxtQuery ="select ID from $wpdb->posts
                    LEFT JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id where {$wpdb->posts}.post_status = 'publish'  ";
                    $where =" (( post_typs LIKE 'projects') AND ( post_title LIKE '%".$advtext."%')) ";
                    $where .=" AND ( $wpdb->postmeta.meta_key = '_cmb_project_category' AND $wpdb->postmeta.meta_value LIKE '%".$advtext."%')";
                    $mypostids = $wpdb->get_col($advtxtQuery." AND ( ".$where." )" );


                    if(count($mypostids)>0){
                        $argsearch['post__in']=$mypostids;
                    }else{
                        $argsearch["s"] = $advtext;
                    }

                }

                if( $category_planet!="" ){
                    if(!isset($argsearch["meta_query"])){
                        $argsearch["meta_query"] = array();
                    }
                    $argsearch["meta_query"][] = array(
                            'key' => '_cmb_project_category',
                            'value' => $category_planet,
                            'compare' => 'LIKE'
                    );

                }


                if( $category_people!="" ){
                     if(!isset($argsearch["meta_query"])){
                          $argsearch["meta_query"] = array();
                     }
                     $argsearch["meta_query"][] = array(
                               'key' => '_cmb_project_category',
                               'value' => $category_people,
                               'compare' => 'LIKE'
                     );

                }

                global $wp_query, $post,$wpdb;
                $query =  new WP_Query($argsearch);
                while($query->have_posts()):
                    $query->next_post();
                $project_list = $query->post->ID;
?> 
share|improve this question
    
Thank you @toscho for help to improve my question I'm not good in English. Thank you very much. +1 –  iDev Man Nov 4 '12 at 16:03
add comment

1 Answer

up vote 1 down vote accepted

You have a typo in your $advtxtQuery query-- $where =" (( post_typs LIKE 'projects')...

For the rest, both queries are searching on the same key so use IN instead of trying to create two separate arrays, as in the Codex example below:

 $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);

You could just pass your $category as is but I'd filter it for maliciousness. In fact, your values are (or seem to be) static so the safest thing is to do this:

$category_args = array();
if(!empty($category[0])) $category_args[] = "Planet";
if(!empty($category[1])) $category_args[] = "People";

And pass that into your query like so:

if( !empty($category_args) ){
  if(!isset($argsearch["meta_query"])){
      $argsearch["meta_query"] = array();
  }
  $argsearch["meta_query"][] = array(
      'key' => '_cmb_project_category',
      'value' => $category_args,
      'compare' => 'IN'
  );
}
share|improve this answer
    
Thank you @s_ha_dum problem solved. +1 –  iDev Man Nov 4 '12 at 16:15
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.