Query_Posts()-“%s”参数有问题

时间:2012-06-26 作者:ktsixit

我正在尝试为自定义帖子类型创建搜索页面。这是我正在使用的代码:

$s = $_GET[\'s\'];
$args = array(
        \'post_type\' => \'companies\',
        \'s\'         => $s
);
query_posts($args);

if ( have_posts() ) :
....results.....
endif
问题是,在query\\u posts()中添加“s”参数,无论“s”值是多少,都会得到零结果。看起来整个搜索机制根本不起作用。有什么建议吗?

4 个回复
SO网友:Otto

你不应该使用$_GET[\'s\'] 直接像那样,你绝对不应该使用query_posts, 尽管我了解如何使用它进行测试。

如果要以这种方式构建自己的搜索机制,那么应该运行$_GET[\'s\']通过urldecode() 首先,要确保它不包含您可能预料不到的奇怪数据,这些数据可能会破坏您的搜索。

实际上,只需将post\\u类型添加到搜索表单中,它就会自动搜索该post类型,您无需执行自己的query\\u posts调用。剩下要做的唯一一件事就是确保post\\u类型正确(是“公司”,对吗?)并确保确实有包含您正在搜索的内容。

搜索可以很好地使用自定义帖子类型。没有什么特别或具体的事情需要去做才能让它发挥作用。

确保帖子类型是公共类型,或者没有为其设置“exclude\\u from\\u search”标志。

SO网友:Tom J Nowell

第一次避免query_post 这是非常糟糕的做法,从不通过GET. 继续之前请阅读以下内容:

http://www.slideshare.net/andrewnacin/you-dont-know-query-wordcamp-netherlands-2012

这是一套演示文稿的幻灯片,它将教会您在WordPress中创建和修改查询的正确方法,它是由核心开发人员编写的。对于任何使用WordPress和it will save you time and money.

返回到搜索问题。这样的URL可以满足您的需求:

example.com/?s=searchterm&post_type=companies
所以问题是如何在搜索表单中复制它。您的搜索表单应类似于:

<form action="<?php home_url(); ?>" method="get">
    <input type="text" name="s" /><?php /* your search term */ ?>
    <input type="hidden" name="post_type" value="companies" /><?php /* set post type */ ?>
    <input type="submit" /><?php /* submit button */ ?>
</form>
您不应修改search.php 因为WordPress将在内部为您处理该部分。

您还应该验证是否有“公司”类型的帖子要搜索,以及搜索词是否存在。设计一个测试,在那里你搜索X,然后显示post Y,你就知道Y有这个搜索词。

SO网友:SickHippie

我发现搜索自定义帖子类型的最佳方法是在搜索表单中添加如下输入字段:

<input type="hidden" name="post_type" value="post-type-name" />
此输入也可以是单选按钮,用于选择不同的帖子类型。只需确保传递的名称与注册的post类型字符串匹配即可。“全部搜索”单选按钮中的值留空。

这将作为查询字符串添加到URL中,并由WordPress在搜索结果页面上进行处理,而无需您做任何额外的工作。

换句话说,您不需要使用query_posts() 完全事实上,这里许多开发人员的普遍观点是,您永远不应该使用query_posts() 对于任何事情,都有更好、更有效的方法来做它所做的一切。

SO网友:Nguyễn Hữu Thịnh

也许,在标题中。php文件使用query\\u post()函数。该函数将清除导致搜索不工作的所有请求字符串。

您应该更改函数以获取post。

此处解决:http://thinhseven.com/wordpress-search-do-not-working/

结束