带有搜索的自定义POST存档,is_earch()为FALSE?

时间:2017-08-30 作者:Mr Pablo

我有一个自定义的帖子类型,并创建了存档模板archive-custom\\u post\\u type。php,其中包括一个搜索表单。

然后,我使用pre\\u get\\u posts向查询中添加参数以筛选结果。

然而,为了确保这只发生在这个归档页面上,我想检查一些事情。首先,我要检查post类型是否匹配。

但后来我想检查is\\u search()参数,结果发现它是false。

如何以及何时定义?我能做些什么让WP知道正在进行搜索吗?

pre\\u get\\u posts回调

$post_type = get_query_var( \'post_type\' );

if ( $post_type === \'document\' ) {
    $params = $_POST;

    if ( $params ) {
        $query->set( \'s\', $params[\'keyword\'] );
        $query->set( \'order\', $params[\'order\'] );
        $query->set( \'orderby\', $params[\'order_by\'] );
    }
}
归档文档。php

<?php get_header(); ?>

<?php get_template_part( \'my-slug\', \'document-filter\' ); ?>

<div id="search-results">

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

    <div>
        <?php the_title(); ?>
    </div>

<?php endwhile; else : ?>
    <p>Sorry, no posts matched your criteria</p>
<?php endif; ?>

</div>

<?php get_footer(); ?>
文档筛选器。php

<form id="document-filter" method="post">
    <select name="order_by">
        <option value="date">Date</option>
        <option value="title">Name</option>
    </select>
    <select name="order">
        <option value="desc">DESC</option>
        <option value="asc">ASC</option>
    </select>
    <input name="keyword" type="text" placeholder="Filter by keyword" value=""/>
    <input type="submit" />
</form>

1 个回复
SO网友:Z. Zlatev

仅命名关键字输入s

<input name="s" type="text" placeholder="Filter by keyword" value=""/>
这足以让WP将请求识别为搜索,而且您不必执行$query->set( \'s\', ... ) 后来

在里面pre_get_posts 操作使用条件is_post_type_archive( \'document\' ) 因此,您的if语句如下所示:

if ( is_post_type_archive(\'document\') && is_search() ) {
  ...
}
希望有帮助

Update

由于您正在搜索,搜索模板(search.php,index.php)将优先于存档。您还需要过滤WP为这些请求分配的模板。

add_filter( \'search_template\', function ( $template ) {
  if ( is_post_type_archive(\'document\') && is_search() ) {
    $find_template = locate_template( [\'archive-document.php\'] );

    if ( \'\' !== $find_template ) {
      $template = $find_template;
    }
  }

  return $template;
});

结束

相关推荐

Search one custom field?

在帖子中,有一个名为“color”的自定义字段。我有自定义搜索页面模板,我想只显示来自该自定义字段的搜索结果。如何限制搜索只在帖子内的一个自定义字段中查看?