2013-02-10 192 views
26

我花了很多时间弄清楚为什么我的搜索不能在我的自定义模板中工作。到目前为止,我已经能够弄清楚如何在我的头文件中包含searchform.php文件,创建了当前为空的search.php文件(因此,当我搜索某些东西时,我将其重定向到一个空白页面,并且我认为我确定需要在search.php文件中做一些工作),我正在阅读Wordpress codex的所有内容,但找不到解决方案,只有我发现的有用信息就是这样。如何显示Wordpress搜索结果?

http://codex.wordpress.org/Creating_a_Search_Page

您能否提供以显示搜索结果做什么需要的?有没有特殊的查询,功能等?我真的无法在任何地方找到它。

我的searchform.php文件,以防您需要它。

<form action="<?php echo home_url(); ?>" id="search-form" method="get"> 
    <input type="text" name="s" id="s" value="type your search" onblur="if(this.value=='')this.value='type your search'" 
    onfocus="if(this.value=='type your search')this.value=''" /> 
    <input type="hidden" value="submit" /> 
</form> 
+0

是不是这样[这个其他问题?](http://stackoverflow.com/questions/14800675/wordpress-not-displaying-search-results) – 2013-02-10 20:58:53

+0

@DamienPirsy这是,我删除了上一个问题因为结果让人难以理解,所以我简化了它。 – Ilja 2013-02-10 21:02:24

回答

16

基本上,您需要在您的search.php模板中包含Wordpress循环来遍历搜索结果并将它们显示为模板的一部分。

下面是在ThemeShaper上从The WordPress Theme Search Template and Page Template开始的一个非常基本的例子。

<?php 
/** 
* The template for displaying Search Results pages. 
* 
* @package Shape 
* @since Shape 1.0 
*/ 

get_header(); ?> 

     <section id="primary" class="content-area"> 
      <div id="content" class="site-content" role="main"> 

      <?php if (have_posts()) : ?> 

       <header class="page-header"> 
        <h1 class="page-title"><?php printf(__('Search Results for: %s', 'shape'), '<span>' . get_search_query() . '</span>'); ?></h1> 
       </header><!-- .page-header --> 

       <?php shape_content_nav('nav-above'); ?> 

       <?php /* Start the Loop */ ?> 
       <?php while (have_posts()) : the_post(); ?> 

        <?php get_template_part('content', 'search'); ?> 

       <?php endwhile; ?> 

       <?php shape_content_nav('nav-below'); ?> 

      <?php else : ?> 

       <?php get_template_part('no-results', 'search'); ?> 

      <?php endif; ?> 

      </div><!-- #content .site-content --> 
     </section><!-- #primary .content-area --> 

<?php get_sidebar(); ?> 
<?php get_footer(); ?> 
4

检查你的theme文件夹模板是否包含search.phpsearchform.php与否。

9

我正在使用searchform.phpsearch.php文件,但在此我提供了实际的代码。

Creating a Search Pagecodex页面帮助这里和#Creating_a_Search_Page_Template显示搜索查询。

在我的情况下,我通过$search_query参数WP_QueryClass(它可以确定是否搜索查询!)。然后我运行The Loop来显示我想要的发布信息,在我的情况下是the_permalinkthe_title

搜索框形式:

<form class="search" method="get" action="<?php echo home_url(); ?>" role="search"> 
    <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') ?>" /> 
    <button type="submit" role="button" class="btn btn-default right"/><span class="glyphicon glyphicon-search white"></span></button> 
</form> 

search.php模板文件:

<?php 
    global $query_string; 
    $query_args = explode("&", $query_string); 
    $search_query = array(); 

    foreach($query_args as $key => $string) { 
     $query_split = explode("=", $string); 
     $search_query[$query_split[0]] = urldecode($query_split[1]); 
    } // foreach 

    $the_query = new WP_Query($search_query); 
    if ($the_query->have_posts()) : 
    ?> 
    <!-- the loop --> 

    <ul>  
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?> 
     <li> 
      <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> 
     </li> 
    <?php endwhile; ?> 
    </ul> 
    <!-- end of the loop --> 

    <?php wp_reset_postdata(); ?> 

<?php else : ?> 
    <p><?php _e('Sorry, no posts matched your criteria.'); ?></p> 
<?php endif; ?> 
21

您需要在您的search.php WordPress的循环 这个例子

的search.php模板文件:

<?php get_header(); ?> 
<?php 
$s=get_search_query(); 
$args = array(
       's' =>$s 
      ); 
    // The Query 
$the_query = new WP_Query($args); 
if ($the_query->have_posts()) { 
     _e("<h2 style='font-weight:bold;color:#000'>Search Results for: ".get_query_var('s')."</h2>"); 
     while ($the_query->have_posts()) { 
      $the_query->the_post(); 
       ?> 
        <li> 
         <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> 
        </li> 
       <?php 
     } 
    }else{ 
?> 
     <h2 style='font-weight:bold;color:#000'>Nothing Found</h2> 
     <div class="alert alert-info"> 
      <p>Sorry, but nothing matched your search criteria. Please try again with some different keywords.</p> 
     </div> 
<?php } ?> 

<?php get_sidebar(); ?> 
<?php get_footer(); ?> 
+0

谢谢。这个对我有用。我也想为搜索结果计数。找到4个搜索结果。任何想法如何? – pagol 2015-05-11 09:43:44

+0

新代码像图片添加新变种: 这是图片:http://i.imgur.com/8NgI15D.png – 2015-05-12 11:10:43

+0

要检查结果计数使用此:<?全球$ wp_query; $ total_results = $ wp_query-> found_posts; ?>。文档:https://codex.wordpress.org/Creating_a_Search_Page – 2016-03-16 16:31:23