______UPDATE_______
Embora eu esteja recebendo mais e mais votos, e a solução funcione, mas a resposta do cybmeta é realmente a resposta que é legal e do jeito do WordPress. Você definitivamente deveria tentar isso.
Passo 1
Comece criando um Formulário de pesquisa avançada com o qual você deseja que seu usuário interaja com o site e salve-o com um nome (ou seja, eu o salvei como advanced-searchform.php
- mas não o salve com - searchform.php
ele substituirá o formulário de pesquisa padrão do WordPress ):
<form method="get" id="advanced-searchform" role="search" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<h3><?php _e( 'Advanced Search', 'textdomain' ); ?></h3>
<!-- PASSING THIS TO TRIGGER THE ADVANCED SEARCH RESULT PAGE FROM functions.php -->
<input type="hidden" name="search" value="advanced">
<label for="name" class=""><?php _e( 'Name: ', 'textdomain' ); ?></label><br>
<input type="text" value="" placeholder="<?php _e( 'Type the Car Name', 'textdomain' ); ?>" name="name" id="name" />
<label for="model" class=""><?php _e( 'Select a Model: ', 'textdomain' ); ?></label><br>
<select name="model" id="model">
<option value=""><?php _e( 'Select one...', 'textdomain' ); ?></option>
<option value="model1"><?php _e( 'Model 1', 'textdomain' ); ?></option>
<option value="model2"><?php _e( 'Model 1', 'textdomain' ); ?></option>
</select>
<input type="submit" id="searchsubmit" value="Search" />
</form>
Em seguida, chame o formulário para o seu modelo da seguinte maneira:
<?php get_template_part( 'advanced', 'searchform' ); ?>
Agora, o seu formulário de pesquisa está pronto, e agora você pode usá-lo e inserir a entrada do usuário no URL.
Passo 2
O que você só precisa é: consultar o banco de dados e consultar o tipo de postagem e seus campos personalizados conforme a consulta de pesquisa . Lembre-se de que sua consulta de pesquisa agora é o URL que você obteve após o envio do formulário. Agora peça ao WordPress para carregar sua página de resultados de pesquisa personalizada quando o formulário for enviado. Coloque a seguinte função no seu functions.php
para que ele ative seu modelo de pesquisa personalizado em vez do padrão search.php
:
<?php
function wpse_load_custom_search_template(){
if( isset($_REQUEST['search']) == 'advanced' ) {
require('advanced-search-result.php');
die();
}
}
add_action('init','wpse_load_custom_search_template');
?>
Trouxe o código para algum lugar do WPSE (esqueci a raiz), mas há controvérsia ao usar o código acima. Mas ele realmente funciona ( desculpa esfarrapada, é claro ).
Verifique de outra maneira o @GM sugerido.
etapa 3
Crie um novo arquivo e salve-o com advanced-search-result.php
(porque usamos esse nome functions.php
) e agora você está livre - obviamente. O conceito é:
- Pegue os dados do URL,
- Use um simples
WP_Query()
(se sua consulta for complexa, use $wpdb
query),
- Passe os comandos na consulta, busque dados do banco de dados e
- Mostrar os resultados
Uma amostra pode ser:
<?php
// Get data from URL into variables
$_name = $_GET['name'] != '' ? $_GET['name'] : '';
$_model = $_GET['model'] != '' ? $_GET['model'] : '';
// Start the Query
$v_args = array(
'post_type' => 'vehicle', // your CPT
's' => $_name, // looks into everything with the keyword from your 'name field'
'meta_query' => array(
array(
'key' => 'car_model', // assumed your meta_key is 'car_model'
'value' => $_model,
'compare' => 'LIKE', // finds models that matches 'model' from the select field
),
)
);
$vehicleSearchQuery = new WP_Query( $v_args );
// Open this line to Debug what's query WP has just run
// var_dump($vehicleSearchQuery->request);
// Show the results
if( $vehicleSearchQuery->have_posts() ) :
while( $vehicleSearchQuery->have_posts() ) : $vehicleSearchQuery->the_post();
the_title(); // Assumed your cars' names are stored as a CPT post title
endwhile;
else :
_e( 'Sorry, nothing matched your search criteria', 'textdomain' );
endif;
wp_reset_postdata();
?>
Então, aqui está sua coisa final. Mas ainda existem muitos desafios:
- Valores alternativos - uma pesquisa avançada pode ser realizada com TODOS os campos ou QUALQUER campo, para que você tenha certeza de que a Consulta está obtendo todos os resultados de acordo com a pesquisa e os dados. Você pode usar a
$wpdb
consulta SQL personalizada para obter resultados de pesquisa complexos e isso será puro MySQL - o WordPress não tem nada lá.
- Sanitização e validação - o campo e a área de texto são tão vulneráveis que podem causar más práticas no seu site. Portanto, a transmissão de dados brutos seria insegura, será necessário higienizar e validá-los antes de passar para a consulta db. ( Sanitização e validação de dados com WordPress - TutsPlus )
- Design - você pode escolher o modelo
page.php
(ou search.php
) e criar esta página com base nisso.
Então, você entendeu a idéia, agora é a sua vez de explorar e descobrir o caminho . Lembre-se, o caminho de todo mundo é diferente. Faça o seu, para que eu possa segui-lo. :)