Jawaban:
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:
<form role="search" method="get" class="search-form" action="<?php echo home_url( '/' ); ?>">
<label>
<span class="screen-reader-text"><?php echo _x( 'Search for:', 'label' ) ?></span>
<input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Search …', 'placeholder' ) ?>" value="<?php echo get_search_query() ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" />
<input type="hidden" name="post_type" value="book" />
</label>
<input type="submit" class="search-submit" value="<?php echo esc_attr_x( 'Search', 'submit button' ) ?>" />
</form>
Dalam functions.php:
function searchfilter($query) {
if ($query->is_search && !is_admin() ) {
if(isset($_GET['post_type'])) {
$type = $_GET['post_type'];
if($type == 'book') {
$query->set('post_type',array('book'));
}
}
}
return $query;
}
add_filter('pre_get_posts','searchfilter');
Di search.php:
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php if(isset($_GET['post_type'])) {
$type = $_GET['post_type'];
if($type == 'book') {?>
/* Format for "book" custom post type */
<?php } else { ?>
/* Format for custom post types that are not "book,"
or you can use elseif to specify a second post type the
same way as above. Copy the default format here if you
only have one custom post type. */
<?php } ?>
<?php } else { ?>
/* Format to display when the post_type parameter
is not set (i.e. default format) */
<?php } ?>
<?php endwhile; else: ?>
/* What to display if there are no results. */
<?php endif; ?>
Secara alami di ketiga tempat Anda harus mengganti "buku" dengan jenis pos kustom Anda.
Semoga ini bisa membantu seseorang!
Kode pendek lebih teraktualisasi
function template_chooser($template)
{
global $wp_query;
$post_type = $wp_query->query_vars["pagename"];
if( isset($_GET['s']) && $post_type == 'products' )
{
return locate_template('archive-search.php'); // redirect to archive-search.php
}
return $template;
}
add_filter('template_include', 'template_chooser');
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:
<?php get_search_form(true); ?>
Dan panggilan ke formulir pencarian saya di header tipe posting kustom adalah:
<?php get_template_part('search','library'); ?>
Yang memiliki bidang tambahan:
<input type="hidden" name="post_type" value="library" /> //Where "library" is my custom post type.
Dalam file fungsi saya memiliki kode berikut yang telah Anda berikan.
/** Custom Search for Library */
function search_library($template)
{
global $wp_query;
$post_type = get_query_var('post_type');
if( $wp_query->is_search && $post_type == 'library' )
{
return locate_template('search-library.php'); // redirect to archive-search.php
}
return $template;
}
add_filter('template_include', 'search_library');
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.
get_search_form('true')
seharusnya get_search_form(true)
. get_search_form
sedang mencari input boolean, jadi salah satu true
atau false
. 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:
function template_chooser($template)
{
global $wp_query;
$post_type = get_query_var('post_type');
if( isset($_GET['s']) && $post_type == 'products' )
{
return locate_template('archive-search.php'); // redirect to archive-search.php
}
return $template;
}
add_filter('template_include', 'template_chooser');