在页面上显示搜索结果

时间:2020-06-19 作者:Vinc

我正在为一个商业新闻网站建立一个公司目录。现在,我想添加一些公司的页面,其中包含一些常见信息和关于该公司的已发布帖子列表。那么如果你打字你会看到什么https://website.com/?s=starbucks. 有人知道这个问题的解决方案吗?非常感谢!你好,文森特

1 个回复
SO网友:Rod

请参阅updated comment.

默认情况下,您必须对搜索功能进行一些更改。

首先,如果要对每种搜索使用不同的模板,可以在search.php 文件

if(isset($_GET[\'search-type\'])) {
   $type = $_GET[\'search-type\'];
   if ($type == \'global\') {
      load_template(TEMPLATEPATH . \'/search-global.php\');
   } elseif ($type == \'blog\') {
      load_template(TEMPLATEPATH . \'/search-blog.php\');
   }
}
要添加字段search-type 在您的搜索表单中。此字段将被隐藏,因为只需要它来分隔搜索类型,在这种情况下,您将实现多个不同的搜索。

<form id="searchform-global" method="get" action="<?php echo home_url(\'/search/\'); ?>" role="global-search">
      <input id="s" type="search" name="s" placeholder="Search global...">
      <input type="hidden" name="search-type" value="global" />
      <button id="searchsubmit" type="submit">Search</button>
</form>
现在,在上面的代码中,您可以看到操作指向/search/ 路径使用操作非常重要pre_get_posts, 为了告诉WordPress页面search 是搜索结果页。显然,您必须首先在WordPress仪表板中创建页面。

因此,您必须在functions.php.

function new_search_global( $query ) {

   $page_id = 43; // This is ID of page with your structure -> http://example.com/mysearch/
   $per_page = -1; // Get all posts.

   // Now we must edit only query on this one page
   if ( !is_admin() && $query->is_main_query() && is_page($page_id) ) {
      // Also, if you want to add a specific class for your template search
      add_filter( \'body_class\', function( $classes ) {
            $classes[] = \'global-search\';
            return $classes;
      } );
      $query->set( \'pagename\', \'\' ); // we reset this one to empty!
      $query->set( \'posts_per_page\', $per_page ); // Set posts per page.
      $query->is_search = true; // We making WP think it is Search page 
      $query->is_page = false; // disable unnecessary WP condition
      $query->is_singular = false; // disable unnecessary WP condition
   }
}
add_action( \'pre_get_posts\', \'new_search_global\' );
如果您创建search-global.php 新的搜索模板,您可以在那里创建一个新的查询,以便获取搜索和其他内容。在下面的示例中,我使用$search 要获取搜索查询并检索该搜索的所有帖子,请执行以下操作:

$search = get_search_query();

// WP_Query arguments
$args = array(
    \'post_type\' => \'post\',
    \'posts_per_page\' => \'-1\',
    \'s\' => $search
);

// The Query
$query = new WP_Query( $args );

// The Loop
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
            // do stuff here
           
    }
} else {
    // no posts found
}

 // Restore original Post Data
 wp_reset_postdata();
     
最后,如果您进行搜索,您将获得以下URL:https://yoururl.com/search/?s=yoursearch&search-type=global.

此外,为了以防万一,您需要刷新permalinks结构,转到Dashboard>;设置(>);Permalinks>;保存设置。

希望能帮助您!:)

更新我刚刚发现我可能误解了你的问题(我将留下以上信息仅供参考)。如果只想在页面上显示特定搜索,只需在那里创建一个新查询,如下所示:

// WP_Query arguments
$args = array(
    \'post_type\' => \'post\',
    \'posts_per_page\' => \'-1\',
    \'s\' => \'starbucks\'
);

// The Query
$query = new WP_Query( $args );

// The Loop
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
            // do stuff here
           
    }
} else {
    // no posts found
}

 // Restore original Post Data
 wp_reset_postdata();
     
The\'s\' 参数正在进行搜索starbucks. 在args 您可以添加更多条件来检索帖子。你可以在法典中进一步阅读WP_Query here.