首页 文章

如何显示Wordpress搜索结果?

提问于
浏览
29

我花了很多时间弄清楚为什么我的搜索不能在我的自定义模板中工作 . 到目前为止,我能够弄清楚如何在我的 Headers 中包含searchform.php文件,创建当前为空的search.php文件(所以当我搜索我被重定向到空白页面的那一刻时,我想我肯定在search.php文件中需要一些东西来使它工作),我正在阅读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>

4 回答

  • 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(); ?>
    
  • 5

    你需要在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(); ?>
    
  • 28

    我正在使用已提到的 searchform.phpsearch.php 文件,但在这里我提供了实际的代码 .

    Creating a Search Page codex 页面有帮助, #Creating_a_Search_Page_Template 显示搜索查询 .

    在我的情况下,我将 $search_query 参数传递给WP_Query Class (可以确定是否是搜索查询!) . 然后我运行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; ?>
    
  • 10

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

相关问题