______UPDATE_______
Meskipun saya mendapatkan lebih banyak suara, dan solusinya berhasil, tetapi jawaban cybmeta sebenarnya adalah jawaban yang baik dan cara WordPress. Anda pasti harus mencobanya.
Langkah 1
Mulailah dengan membuat Formulir Pencarian Lanjutan yang Anda inginkan pengguna Anda akan berinteraksi dengan situs web, dan menyimpannya dengan nama (yaitu saya menyimpannya sebagai advanced-searchform.php
- tetapi jangan menyimpannya dengan searchform.php
itu maka itu akan menggantikan formulir pencarian default 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>
Kemudian panggil formulir ke templat Anda seperti berikut:
<?php get_template_part( 'advanced', 'searchform' ); ?>
Sekarang formulir pencarian Anda sudah siap, dan sekarang Anda dapat menggunakan formulir pencarian dan dapat mengambil input pengguna ke dalam URL.
Langkah 2
Yang Anda butuhkan adalah: query database dan query tipe posting dan bidang kustom sesuai permintaan pencarian . Ingat permintaan pencarian Anda sekarang adalah URL yang Anda dapatkan setelah pengiriman formulir. Sekarang minta WordPress untuk memuat halaman hasil pencarian kustom Anda ketika formulir dikirimkan. Tempatkan fungsi berikut ke dalam Anda functions.php
sehingga akan mengaktifkan templat pencarian khusus Anda alih-alih default 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');
?>
Saya membawa kode dari WPSE (saya lupa root), tetapi ada kontroversi menggunakan kode di atas. Tapi itu benar-benar berfungsi ( tentu saja alasan yang lemah ).
Periksa cara lain yang disarankan @GM.
Langkah 3
Buat file baru dan simpan dengan advanced-search-result.php
(karena kami menggunakan nama ini functions.php
) dan sekarang Anda bebas - jelas. Konsepnya adalah:
- Raih data dari URL,
- Gunakan sederhana
WP_Query()
(jika permintaan Anda kompleks maka gunakan $wpdb
permintaan),
- Lewati perintah dalam kueri, ambil data dari db, dan
- Tunjukkan hasilnya [s]
Sampel dapat berupa:
<?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();
?>
Jadi, inilah hal terakhir Anda. Namun masih ada banyak tantangan:
- Nilai Alternatif - pencarian lanjutan dapat dilakukan dengan SEMUA bidang atau SETIAP bidang, sehingga Anda harus memastikan Kueri mengambil semua hasil sesuai pencarian dan data. Anda dapat menggunakan
$wpdb
kueri SQL khusus untuk hasil pencarian yang kompleks dan itu akan menjadi MySQL murni - WordPress tidak ada di sana.
- Sanitasi & Validasi - bidang teks dan textarea sangat rentan yang dapat menyebabkan praktik pada situs Anda. Jadi mengirimkan data mentah akan tidak aman, Anda perlu Sanitasi dan Validasi sebelum meneruskan ke permintaan db. ( Sanitasi Data dan Validasi dengan WordPress - TutsPlus )
- Merancang - Anda dapat memilih
page.php
(atau search.php
) templat dan membuat halaman ini berdasarkan itu.
Jadi, Anda punya ide, sekarang giliran Anda untuk menjelajahi dan menemukan jalannya . Ingat, cara setiap orang berbeda. Buat milikmu, supaya aku bisa mengikutimu. :)