Anda sedang mengerjakan tema WordPress dan ingin menaruh kotak pencarian di header, tapi enggan memasang plugin tambahan karena hanya butuh formulir sederhana. WordPress sudah menyediakan fungsi bawaan untuk menampilkan form pencarian. Anda tinggal memanggilnya di file tema yang tepat. Artikel ini membahas cara menambahkan fitur pencarian di WordPress tanpa plugin, mulai dari formulir dasar hingga menyesuaikan hasil pencarian.
Fungsi Bawaan WordPress untuk Form Pencarian
WordPress menyertakan fungsi get_search_form() yang akan mencari file searchform.php di folder tema. Jika file itu tidak ada, WordPress memakai formulir standar dari core. Anda tidak perlu menulis HTML form dari nol. Cukup panggil fungsi tersebut di tempat yang diinginkan, misalnya di header.php atau sidebar.php.
<?php get_search_form(); ?>
Kode di atas akan menampilkan kotak input dan tombol submit. Formulir mengirim data ke home_url( '/' ) dengan parameter s, parameter pencarian standar WordPress.
Membuat Form Pencarian Kustom
Jika ingin tampilan yang berbeda dari bawaan, buat file searchform.php di folder tema. WordPress akan otomatis mendeteksinya. Isi file tersebut dengan struktur HTML form yang valid.
<form role="search" method="get" class="search-form" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<label for="search-field">Cari:</label>
<input type="search" id="search-field" name="s" value="<?php echo get_search_query(); ?>" placeholder="Ketik kata kunci..." />
<button type="submit">Cari</button>
</form>
Perhatikan penggunaan esc_url() dan get_search_query(). Keduanya penting untuk keamanan dan agar kata kunci yang sudah diketik tetap muncul di kotak setelah halaman hasil dimuat.
Menempatkan Kotak Pencarian di Tema
Lokasi penempatan memengaruhi kegunaan. Untuk tema klasik, Anda bisa menaruh panggilan get_search_form() di dalam header.php tepat setelah tag <nav> atau di dalam widget area. Jika tema Anda menggunakan functions.php, daftarkan area widget tambahan agar pengguna bisa memindahkan kotak pencarian lewat Customizer.
function webdeki_register_search_widget() {
register_sidebar( array(
'name' => 'Area Pencarian',
'id' => 'search-area',
'before_widget' => '<div class="search-widget">',
'after_widget' => '</div>',
) );
}
add_action( 'widgets_init', 'webdeki_register_search_widget' );
Setelah area widget terdaftar, buka Appearance > Widgets dan tarik widget Search ke area tersebut. Ini cara paling fleksibel tanpa menyentuh file tema lagi.
Menyesuaikan Hasil Pencarian
Formulir hanyalah pintu masuk. Hasil pencarian ditangani oleh template search.php. Jika tema Anda belum punya file itu, WordPress akan memakai index.php. Anda bisa membuat search.php sendiri untuk menampilkan hasil dengan format khusus, misalnya hanya judul dan cuplikan.
<?php if ( have_posts() ) : ?>
<h2>Hasil untuk: <?php echo get_search_query(); ?></h2>
<?php while ( have_posts() ) : the_post(); ?>
<article>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<?php the_excerpt(); ?>
</article>
<?php endwhile; ?>
<?php else : ?>
<p>Tidak ada hasil. Coba kata kunci lain.</p>
<?php endif; ?>
Dengan mengedit search.php, Anda bisa menambahkan paginasi, menampilkan thumbnail, atau menyaring jenis konten tertentu.
Membatasi Pencarian ke Jenis Konten Tertentu
Secara default, WordPress mencari di semua pos, halaman, dan custom post type yang publicly_queryable. Jika ingin membatasi hanya pada pos, gunakan filter pre_get_posts di functions.php.
function webdeki_filter_search( $query ) {
if ( $query->is_search() && ! is_admin() ) {
$query->set( 'post_type', array( 'post' ) );
}
}
add_action( 'pre_get_posts', 'webdeki_filter_search' );
Filter ini juga bisa dipakai untuk mengecualikan kategori tertentu atau mengubah jumlah hasil per halaman. Pastikan untuk selalu memeriksa ! is_admin() agar tidak mengganggu tampilan backend.
Menambahkan Dukungan Pencarian ke Custom Post Type
Jika Anda punya custom post type, misalnya “produk”, dan ingin produk ikut muncul di hasil pencarian, pastikan saat mendaftarkannya Anda mengatur 'exclude_from_search' => false. Beberapa developer memilih true secara default untuk menjaga hasil tetap relevan. Ubah sesuai kebutuhan. Setelah itu, filter pre_get_posts di atas dapat disesuaikan untuk menyertakan post type tersebut.
Pertimbangan Keamanan dan Performa
Formulir pencarian yang dibuat manual tetap harus mengikuti praktik aman: gunakan esc_url() pada atribut action, esc_attr() pada nilai input, dan get_search_query() yang sudah ter-escape. Untuk performa, pencarian WordPress menggunakan query database standar. Pada situs dengan ribuan konten, pencarian bisa lambat. Anda bisa menambahkan indeks pada kolom post_title dan post_content di tabel wp_posts, tetapi lakukan dengan hati-hati karena perubahan skema bisa memengaruhi pembaruan core.
Jika suatu saat Anda membutuhkan fitur pencarian yang lebih canggih, seperti pencarian full-text atau filter facet, plugin khusus mungkin lebih tepat. Untuk kebutuhan dasar, pendekatan tanpa plugin sudah cukup dan lebih ringan.
Ringkasan
Menambahkan fitur pencarian di WordPress tanpa plugin dapat dilakukan dengan memanfaatkan fungsi get_search_form(), membuat searchform.php, dan menyesuaikan search.php. Anda juga bisa mengatur area widget dan memfilter query pencarian lewat pre_get_posts. Semua langkah ini menggunakan API bawaan WordPress sehingga tidak menambah beban plugin.
Pertanyaan yang Sering Diajukan
Apakah saya perlu membuat file searchform.php?
Tidak wajib. WordPress akan memakai formulir standar jika file itu tidak ada. Membuatnya berguna ketika Anda ingin menyesuaikan markup atau kelas CSS.
Bagaimana cara mengecualikan halaman dari hasil pencarian?
Gunakan filter pre_get_posts dan atur post_type menjadi array('post') sehingga hanya pos yang dicari. Anda juga bisa mengecualikan ID halaman tertentu dengan parameter post__not_in.
Apakah form pencarian manual ini aman?
Ya, selama Anda menggunakan fungsi escaping seperti esc_url() dan get_search_query(). WordPress juga sudah memvalidasi parameter s di sisi server.


