搜索查询似乎不起作用?

时间:2012-05-23 作者:Justine

我对搜索查询有问题。任何时候您提出其他查询,例如:

我的网站。com/?s=wordpress&;post\\u类型=第页

我的网站。com/?s=wordpress&;post\\u type=页面,post

我的网站。净/?s=wordpress&;cat=1

我的网站。净/?s=wordpress&;post\\U type=post&;标记=genesis post

我的网站。净/?s=wordpress&;post\\U type=post&;标签=论文帖子

它应该在特定范围内进行搜索(帖子类型、类别、标签)。

在我的例子中,无论我把什么作为附加参数,它似乎都不起作用,它将显示包含我正在搜索的单词的所有结果。

在我的帖子类型中,我有query_var 设置为true 所以在理论上,它应该是有效的。

我的搜索。php循环如下所示

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

    <div class="post">

        <?php if ( \'post\' == get_post_type() ) : ?>
        <p class="category"><?php the_category(\' \'); ?></p>
        <?php else : ?>
        <p class="category">Resource</p>
        <?php endif; ?>

        <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
        <?php the_excerpt(); ?> 

    </div><!-- /post -->

<?php endwhile; ?>
在我的searchform中使用隐藏输入。php也不起作用,

<form method="get" id="searchform" action="<?php bloginfo(\'url\'); ?>"  class="search">
    <input type="text" class="field" name="s" id="s" />
    <input type="submit" class="submit" name="submit" value="Go" />
    <input type="hidden" name="post_type" value="myposttype" />
</form>
它仍然会搜索普通帖子,而不仅仅是在myposttype CPT中。

知道为什么搜索查询不起作用吗?感谢您的帮助。

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

我已经发现了post_type 不会将搜索限制为该类型,只会将该类型添加到已搜索的数组中。

要构建复杂的搜索查询,您可以使用钩子pre_get_posts 并执行一些查询操作。

对于一个简单的示例,首先我添加自己的查询变量以传递到WordPress的已知查询变量数组:

function wpa53029_query_vars( $query_vars ){
    $query_vars[] = \'my_type\';
    return $query_vars;
}
add_filter( \'query_vars\', \'wpa53029_query_vars\' );
然后设置表单以传递post类型,如:

我的网站。com/?s=wordpress&;my\\u type=页面

我的网站。com/?s=wordpress&;my\\u type=页面,mycustomtype

然后在查询数据库之前添加一些代码来拦截该查询变量,并设置post类型:

function wpa53029_pre_get_posts( $query ){
    if( isset( $query->query_vars[\'my_type\'] ) ){
        $types = explode( \',\', $query->query_vars[\'my_type\'] );
        $query->set( \'post_type\', $types );
    }

    return $query;
}
add_action( \'pre_get_posts\', \'wpa53029_pre_get_posts\' );
为了进行调试,请在search.php 模板来查看如何设置所有内容,以及WordPress生成的用于查询数据库的实际SQL查询。WordPress使用$wp_query 作为保存主查询的全局变量:

<pre>
    <?php print_r( $wp_query ); ?>
</pre>

SO网友:Alex Lane

我还没有对此进行测试,因此它可能不会像我认为的那样工作,但请尝试以下方法:

$post_type = $_GET[\'post_type\'];

global $query_string
query_posts( $query_string . \'&post_type=\' . $post_type );

// loop here

结束

相关推荐

Querying two taxonomies

我有两种分类法:“指南类型”和“工具”。它们看起来像这样:Type of guide- Article - Video - Cheat sheet Tool— 学习管理系统测验工具- Hide a grades column (article) - Creating a Gradebook (article) - Long Answer Question Steps (article) - Matching Questions (article) -