我使用以下代码构建了一个自定义搜索:
functions.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-archive.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>
</div><!-- content -->
</div><!-- contentarea -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
search form
<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" />
<input type="submit" alt="Search" value="Search" />
</form>
</div>
问题是,当我提交一个空的搜索表单时,它会显示所有帖子,但不会显示搜索存档模板。我怎样才能解决这个问题?
最合适的回答,由SO网友:david.binda 整理而成
这不仅与自定义post\\u类型搜索有关。WordPress本身存在空搜索问题。我使用以下简单代码段作为解决方法:
add_filter( \'request\', \'my_request_filter\' );
function my_request_filter( $query_vars ) {
if( isset( $_GET[\'s\'] ) && empty( $_GET[\'s\'] ) ) {
$query_vars[\'s\'] = " ";
}
return $query_vars;
}
您可以利用这一点,并在此基础上构建自己的代码。