How to use custom field to search for wordpress post type?

Using pre_get_posts may work. Can you try something similar to the following and let me know if it meets your needs:

function search_filter($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    if ($query->is_search) {
      $query->set('post_type', array( 'post', 'movie' ) );
      //Should do some sanitation on $GET too
      if(isset($_GET['author'])){    //Change to your field dropdown name
        $query->set('meta_key', 'author'); //change to custom field name
        $query->set('meta_value', $_GET['author']);   
      }
      else if(isset($_GET['pubyear'])){    
        $query->set('meta_key', 'pubyear');
        $query->set('meta_value', $_GET['pubyear']);   
      }
    }
  }
}

add_action('pre_get_posts','search_filter');

UPDATE: May also be better to use $query->set('meta_query'), array(..)... depending on your needs

Leave a Comment