जवाबों:
यहाँ मैंने कोशिश की है और 3 चरणों के साथ एक समाधान मिला है। मान लें कि आपका कस्टम पोस्ट प्रकार " उत्पाद " है
१। फ़ंक्शन कोड जोड़ें यहां आप संग्रह-खोज को निर्दिष्ट कर सकते हैं। 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');
२। कस्टम पोस्ट प्रकार (संग्रह- 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(); ?>
बिल्ड सर्च फॉर्म
इस सर्च फॉर्म में, मूल्य "उत्पादों" छिपा हुआ है और यह केवल उत्पाद पदों की खोज करेगा ।
<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>
अधिक जानकारी के लिए, मैं आपको यहाँ पर जोड़ना चाहूंगा
http://www.wpbeginner.com/wp-tutorials/how-to-create-advanced-search-form-in-wordpress-for-custom-post-tutoriales/
get_query_var('post_type')
एक सरणी (बजाय एक स्ट्रिंग) लौटा दी गई ताकि सीधे तुलना नहीं की जा सके। चूंकि मैं एक समय में केवल एक पोस्ट प्रकार खोज रहा हूं, इसलिए मैंने बस अपना $post_type
संस्करण बदल दिया है $post_type[0]
।
http://localhost:3000/?s=cloud%27&post_type=product
करने के लिएhttp://localhost:3000/search/cloud/product
search_template
फिल्टर करने के लिए एक अधिक उपयुक्त विकल्प प्रतीत हो रहा हैtemplate_include
यहाँ मेरे लिए क्या काम करता है। उतना साफ नहीं है, लेकिन मुझे इनमें से कोई भी जवाब काम नहीं मिला।
कस्टम पोस्ट प्रकार के लिए खोज फ़ॉर्म:
<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>
फ़ंक्शन में।
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');
खोज में।
<?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; ?>
स्वाभाविक रूप से सभी तीन स्थानों पर आपको अपने कस्टम पोस्ट प्रकार के साथ "पुस्तक" को बदलना होगा।
आशा है कि यह किसी की मदद करता है!
एक छोटा कोड अधिक वास्तविक
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');
मैं अपनी सामान्य खोजों और कस्टम पोस्ट प्रकार पर अपनी खोजों के लिए दो भिन्न रूपों का उपयोग करना चाह रहा था।
मेरा कस्टम पोस्ट प्रकार सामान्य पृष्ठों की तुलना में एक भिन्न शीर्षक का उपयोग करता है, मेरे सामान्य पृष्ठ पर, मेरे खोज फ़ॉर्म में कॉल है:
<?php get_search_form(true); ?>
और कस्टम पोस्ट प्रकार हेडर में मेरे खोज फ़ॉर्म पर कॉल है:
<?php get_template_part('search','library'); ?>
जिसका एक अतिरिक्त क्षेत्र है:
<input type="hidden" name="post_type" value="library" /> //Where "library" is my custom post type.
फ़ंक्शन फ़ाइल में मेरे पास निम्न कोड है जो आपने प्रदान किया है।
/** 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');
जो पता लगाता है कि खोज प्रपत्र कस्टम फ़ील्ड में खोज कर रहा है या नहीं, इस प्रकार खोज को कस्टम टेम्पलेट में दिखाया जाए, अन्यथा सामान्य टेम्पलेट का उपयोग करें।
संपादित करें: get_search_form () फ़ंक्शन कॉल को ठीक किया, जो कि कोई भी बात नहीं हुई है।
get_search_form('true')
होना चाहिए get_search_form(true)
। get_search_form
एक बूलियन इनपुट की तलाश में है, तो या तो है true
या false
। इसे उद्धरणों में लपेटकर आप इसे एक स्ट्रिंग खिला रहे हैं, बूलियन पैरामीटर नहीं। जिस तरह से समारोह की स्थापना की है, दोनों कि 'true'
और 'false'
एक ही परिणाम वापसी होगी, क्योंकि वे दोनों गैर रिक्त स्ट्रिंग (जो समारोह दोनों ही मामलों में सही वापस जाने के लिए कारण बनता है) कर रहे हैं।
खाली इनपुट खोज समस्या को ठीक करने के लिए आप इसके साथ फ़ंक्शन कोड स्थानापन्न कर सकते हैं:
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');