Saya memiliki bidang pencarian untuk posting blog, tetapi saya membutuhkan yang lain untuk jenis posting kustom. Bagaimana saya bisa membuat formulir pencarian kustom ini dengan tata letak hasil pencarian yang berbeda ?
44
Saya memiliki bidang pencarian untuk posting blog, tetapi saya membutuhkan yang lain untuk jenis posting kustom. Bagaimana saya bisa membuat formulir pencarian kustom ini dengan tata letak hasil pencarian yang berbeda ?
Inilah yang saya coba dan dapatkan solusi dengan 3 langkah. Katakanlah jenis posting khusus Anda adalah " produk "
1. Tambahkan Kode Fungsi di sini Anda dapat menentukan archive-search.php
function template_chooser($template)
{
global $wp_query;
$post_type = get_query_var('post_type');
if( $wp_query->is_search && $post_type == 'products' )
{
return locate_template('archive-search.php'); // redirect to archive-search.php
}
return $template;
}
add_filter('template_include', 'template_chooser');
2. Buat template hasil pencarian untuk jenis posting khusus (archive-search.php)
<?php
/* Template Name: Custom Search */
get_header(); ?>
<div class="contentarea">
<div id="content" class="content_right">
<h3>Search Result for : <?php echo "$s"; ?> </h3>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div id="post-<?php the_ID(); ?>" class="posts">
<article>
<h4><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h4>
<p><?php the_exerpt(); ?></p>
<p align="right"><a href="<?php the_permalink(); ?>">Read More</a></p>
<span class="post-meta"> Post By <?php the_author(); ?>
| Date : <?php echo date('j F Y'); ?></span>
</article><!-- #post -->
</div>
<?php endwhile; ?>
<?php endif; ?>
</div><!-- content -->
</div><!-- contentarea -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Buat Formulir Pencarian
Dalam Formulir Pencarian ini, nilai "produk" disembunyikan dan hanya akan mencari posting produk .
<div>
<h3>Search Products</h3>
<form role="search" action="<?php echo site_url('/'); ?>" method="get" id="searchform">
<input type="text" name="s" placeholder="Search Products"/>
<input type="hidden" name="post_type" value="products" /> <!-- // hidden 'products' value -->
<input type="submit" alt="Search" value="Search" />
</form>
</div>
untuk lebih lanjut, saya ingin menghubungkan Anda ke sini
http://www.wpbeginner.com/wp-tutorials/how-to-create-advanced-search-form-in-wordpress-for-custom-post-types/
get_query_var('post_type')
mengembalikan array (bukan string) sehingga tidak dapat dibandingkan secara langsung. Karena saya hanya mencari satu jenis posting pada suatu waktu, saya hanya mengubah$post_type
var saya menjadi$post_type[0]
.http://localhost:3000/?s=cloud%27&post_type=product
kehttp://localhost:3000/search/cloud/product
search_template
penyaring tampaknya menjadi alternatif yang lebih tepat untuktemplate_include
Inilah yang bekerja untuk saya. Tidak sebersih tapi saya tidak bisa mendapatkan jawaban yang lain untuk bekerja.
Formulir pencarian untuk Jenis Posting Kustom:
Dalam functions.php:
Di search.php:
Secara alami di ketiga tempat Anda harus mengganti "buku" dengan jenis pos kustom Anda.
Semoga ini bisa membantu seseorang!
sumber
Kode pendek lebih teraktualisasi
sumber
Saya mencari untuk menggunakan dua bentuk berbeda untuk pencarian normal saya dan pencarian saya pada jenis posting kustom.
Jenis posting kustom saya menggunakan tajuk yang berbeda dari halaman normal, pada halaman normal saya, panggilan ke formulir pencarian saya adalah:
Dan panggilan ke formulir pencarian saya di header tipe posting kustom adalah:
Yang memiliki bidang tambahan:
Dalam file fungsi saya memiliki kode berikut yang telah Anda berikan.
Yang mendeteksi jika formulir pencarian melakukan pencarian di dalam bidang khusus, sehingga menampilkan pencarian di templat kustom, jika tidak gunakan templat normal.
Sunting: memperbaiki panggilan fungsi get_search_form () yang akan mengembalikan true apa pun yang terjadi.
sumber
get_search_form('true')
seharusnyaget_search_form(true)
.get_search_form
sedang mencari input boolean, jadi salah satutrue
ataufalse
. Dengan membungkusnya dalam tanda kutip, Anda memberinya string, bukan parameter boolean. Cara fungsi diatur, keduanya'true'
dan'false'
akan mengembalikan hasil yang sama, karena keduanya adalah string yang tidak kosong (yang menyebabkan fungsi mengembalikan true dalam kedua kasus).Untuk memperbaiki masalah pencarian input kosong, Anda dapat mengganti kode fungsi dengan ini:
sumber