Criando filtro de pesquisa através do plugin

Estou usando wordpress para projeto imobiliário, para isso, estou usando um tema junto com um plugin (realia real estate) para imóveis. Então eu acredito que isso não está fora do ponto … Minha pergunta é simples, eu tenho vários meta_key personalizados, como property_baths (banheiros), property_beds (rooms) e etc … O que eu quero fazer é criar um filtro, um pesquisa avançada no gerenciamento wordpress, na guia “Posts”. Eu também preciso que essa pesquisa seja cumulativa, por exemplo, se os “banheiros” e os “quartos” forem preenchidos, deve filtrar mensagens de acordo com o que foi preenchido.

Depois de muita pesquisa, encontrei uma maneira de fazer isso criando um plugin, mas o código que eu tenho aqui, está passando apenas 1 meta_key com seu meta_value, preciso que ele passe vários meta_key com seus valores …

O que eu tenho até agora é o seguinte:

add_action( 'restrict_manage_posts', 'wpse45436_admin_posts_filter_restrict_manage_posts' ); function wpse45436_admin_posts_filter_restrict_manage_posts(){ $type = 'property'; if (isset($_GET['post_type'])) { $type = $_GET['post_type']; } //only add filter to post type you want if ('property' == $type){ //change this to the list of values you want to show //in 'label' => 'value' format $values = array( 'Banheiros' => 'property_baths', 'Quartos' => 'property_beds' ); $current_v = isset($_GET['ADMIN_FILTER_FIELD_VALUE'])? $_GET['ADMIN_FILTER_FIELD_VALUE']:''; foreach ($values as $label => $value) { printf ( '', $value, $value == $current_v? ' value="'.$current_v.'"':'', $label ); } } } add_filter('parse_query', 'wpse45436_posts_filter'); function wpse45436_posts_filter( $query ){ global $pagenow; $type = 'property'; if (isset($_GET['post_type'])) { $type = $_GET['post_type']; } if ( 'property' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['property_baths']) && $_GET['property_baths'] != '') { $query->query_vars['meta_key'] = 'property_baths'; $query->query_vars['meta_value'] = $_GET['property_baths']; } } 

Com este código (plugin) posso filtrar apenas 1 meta_key, eu preciso fazer de uma maneira que eu possa usar várias “meta_keys” com seus valores.

Eu tentei loop, eu tentei array, mas nada funcionou. Espero que alguém possa me ajudar … Obrigado antecipadamente …

Solutions Collecting From Web of "Criando filtro de pesquisa através do plugin"

Você pode adicionar mais de uma chamada de filtro, então cada uma das suas meta_key personalizadas pode ser manipulada em um código separado e, quando executado, irá ajustar a consulta de forma cumulativa.

Talvez olhe o filtro pre_get_posts vez de parse_query (embora a solução que eu sugiro poderia funcionar em ambos os casos). pre_get_posts fornece access à consulta atual antes de ser executado pelo WordPress e você limitará as postagens que a consulta buscará no database.

Não testei este código: é apenas uma edição aqui contra seu código para mostrar como você pode abordar isso (então, verifique a syntax por erros).

Você acabaria com algo como isto:

 add_filter('pre_get_posts', 'wpse45436_property_baths_posts_filter'); function wpse45436_property_baths_posts_filter( $query ){ global $pagenow; $type = 'property'; if (isset($_GET['post_type'])) { $type = $_GET['post_type']; } if ( 'property' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['property_baths']) && $_GET['property_baths'] != '') { $query->query_vars['meta_key'] = 'property_baths'; $query->query_vars['meta_value'] = $_GET['property_baths']; } } add_filter('pre_get_posts', 'wpse45436_property_beds_posts_filter'); function wpse45436_property_beds_posts_filter( $query ){ global $pagenow; $type = 'property'; if (isset($_GET['post_type'])) { $type = $_GET['post_type']; } if ( 'property' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['property_beds']) && $_GET['property_beds'] != '') { $query->query_vars['meta_key'] = 'property_beds'; $query->query_vars['meta_value'] = $_GET['property_beds']; } } 

Verifique o Codex para obter mais detalhes sobre o filtro pre_get_posts