在同一页中显示搜索结果

时间:2012-04-23 作者:Romes

问题

我的网站上有一个页面,我需要在该页面中进行额外搜索。我使用默认的WordPress搜索方式<?php get_search_form(); ?> 对于我的主标题搜索,这非常有效。

我在页面上创建了另一个HTML表单,没有使用默认的PHP方法,用于其他搜索,如下所示:

<form action="<?php bloginfo(\'siteurl\'); ?>" id="searchform" method="get">
    <div>
        <label for="s" class="screen-reader-text">Search for:</label>
        <input type="text" id="s" name="s" value="" />
        <input type="hidden" name="post_type" value="photo_group" /> 
        <input type="submit" value="Search" id="searchsubmit" />
    </div>
</form>
我使用type=hidden 要获取我要搜索的自定义帖子类型,请执行以下操作:

<input type="hidden" name="post_type" value="photo_group" />
这给了我一个类似以下内容的链接:

http://mywebsite.com/?s=search&post_type=photo_group
当我使用在页面上创建的新搜索表单时,它使用默认搜索。php显示结果。如何显示自定义帖子类型搜索的搜索结果,比如在div 在同一页上

我尝试过创建一个新的页面模板来显示结果,但没有成功,这是否是正确的做法,而我只是做错了?

*Edit*

<div id="photo-search">
    <h2>Search Photos:</h2>
    <form action="<?php the_permalink(); ?>" id="searchform" method="get">
        <div>
            <label for="s" class="screen-reader-text">Search for:</label>
            <input type="text" id="search" name="search" value="" />
            <input type="hidden" name="post_type" value="photo_group" /> 
            <input type="submit" value="Search" id="searchsubmit" />
        </div>
    </form>

    <?php if( isset( $_REQUEST[\'search\'] ) ) {
        query_posts( array(
        \'s\' => $_REQUEST[\'search\'],
        \'post_type\' => $_REQUEST[\'photo_group\'],
        \'paged\' => $paged
        ));

        if( have_posts() ) : while ( have_posts() ) :
            the_title();
            the_content();                      
        endwhile; endif;

        wp_reset_query(); 
        }
    ?>
</div>
运行搜索时,我发现404错误页未找到。

2 个回复
最合适的回答,由SO网友:sanchothefat 整理而成

最简单的选项是,如果要在页面上下文中显示搜索结果,则需要执行自定义循环,否则将无法访问页面信息。

使用名称更改输入s 到其他类似的地方searchq 阻止wordpress这样做通常是内置搜索。

下一步更改表单action 当前页面URL的参数。您可以使用<?php get_permalink(); ?> 为此。

您需要执行的循环如下:

<?php
    if ( isset( $_REQUEST[ \'search\' ] ) ) {
          // run search query
          query_posts( array(
             \'s\' => $_REQUEST[ \'search\' ],
             \'post_type\' => $_REQUEST[ \'post_type\' ],
             \'paged\' => $paged
             )
          );

        // loop
        if ( have_posts() ) : while ( have_posts() ) :
            // loop through results here
        endwhile; endif;

        // return to original query
        wp_reset_query();
    }
?>

SO网友:onetrickpony

您可以在处理查询之前对其进行修改:

add_action(\'parse_query\', function($query){

  // not the search request
  if(!$query->is_search)
    return;

  // validate post type here (you should provide a white-list)
  $post_type = isset($_GET[\'post_type\']) ? sanitize_key($_GET[\'post_type\']) : false;

  // adjust the query
  if($post_type && post_type_exists($post_type))
    $query->set(\'post_type\', $post_type);

});
这将使您的帖子与请求的帖子类型相匹配。

如果要查询多个帖子类型,只需传递一个数组即可:array(\'post\', \'page\', $post_type). 要根据类型对帖子进行分组,请检查循环中的类型,并将您的CPT存储在临时数组中,您可以在显示正常帖子后迭代该数组。

结束

相关推荐

If search matches taxonomy

如果搜索输入与分类名称完全匹配,是否可以将用户重定向到分类页面?例如,我有一个称为“参与者”的分类法。如果有人在搜索字段中输入“Tom Hanks”,而不是进入常规搜索页面,则会将他们重定向到Tom Hanks的分类页面。