Crystal Ball编程以及搜索框失败的原因您的表单因此而失败:
action="<?php bloginfo(\'template_url\'); ?>/MilkNHny/search.php"
你应该
never 通过URL直接调用模板。
您的模板假设WordPress环境已经加载,这是一个公平的假设。然而,因为您直接调用了它,所以它没有。
搜索php是WordPress搜索时寻找的模板。它不进行实际搜索。如果我们应用一些逻辑,浏览器就会进行搜索。php和Immediately尝试在不显示以下内容的情况下显示结果:
费心实际执行搜索,加载插件和主题,检查重写规则,清理数据,因为PHP没有crystal ball功能,所以出错了。抱歉,如果这看起来很残酷,但这一点需要有效地证明。
请记住,计算机是按指示执行的,而不是按预期执行的。如果你不能回答“为什么会这样?”或者“它怎么知道?”那么,很有可能它不知道,而且它不会这样做,事情会变得非常壮观。
搜索请求的工作原理当您转到URL时,WordPress会查找一个大的正则表达式列表,并查看哪个是第一个匹配的正则表达式。这些“regex”告诉WordPress如何映射/category/example-category/hello-world
它可以传递到WP\\u查询中,例如。name=hello-world
. 这些参数与WP\\U查询中使用的参数相同,后者是post循环的来源。
其中一个参数是s
. 搜索表单通过URL传入搜索查询,例如:
example.com/?s=helloworld
WordPress然后传递此
s
参数转换为其主循环查询,并在心里记下:
“嘿s
事情是这样的,这一定是一个搜索查询!主题是否有搜索。php?加载搜索。PHP模板!!!!!!(ps:如果我们没有加载index.php)
现在WordPress启动了WP_Query( array ( \'s\' => \'helloworld\' ) )
, 所有内容都已包装好,因此您可以使用have\\u posts等将其打印出来
那么基本的搜索表单是
现在我们了解了搜索查询的工作原理,让我们看看基本标记:
<form method="GET" action="<?php echo home_url(); ?>">
<input type="text" name="s">
</form>
由于GET变量是在URL中传递的,所以POST变量是在地址栏中看不到的标题中传递的
home_url()
因为这是网站的主要索引。我们可以通过以下方式在日期档案的类别中搜索:?s=在其他页面的末尾,但假设我们要搜索整个网站
name="s"
因为这是WordPress用来指定搜索字符串的查询var,所以我们可以使用其他函数进一步扩展它,例如
get_search_query()
等等,但这些都不是必需的。
另外,您也不需要从前端提交搜索字符串。假设您想添加一个框,其中列出包含“Moomins”一词的帖子(因为每个人都喜欢Moomins)。
我可以通过使用s
参数,例如:
$q = new WP_Query( \'s=Moomins\' );
$while ( $q->have_posts() ) {
$q->the_post();
the_title();
}
wp_reset_postdata(); // clean up after ourselves
嘿,presto,搜索“Moomins”的帖子标题列表