我想在WordPress搜索结果页面上添加一些自定义条件并做其他事情。因此,我正在检查is_search()的值以确保仅在正确的时间应用该条件。因此,在我的孩子主题的functions.php中,我输入:
if (is_search()) {
...
}
但这总是返回false,即使使用http://mysite/?s=something这样的URL,也正在使用我主题的search.php模板!从functions.php调用这无效吗,还是我误解了此函数的用途?
为此,看看像https://wphierarchy.com所示的模板层次结构,WP怎么会知道它是一个搜索结果页面?如何知道沿着“搜索结果”路径前进?我花了一些时间仔细阅读源代码,但仍找不到合适的位置。
答案 0 :(得分:0)
我尝试从search.php调用is_search(),并且有效!从更多的源代码细读中,我发现您不能从functions.php调用is_search(),因为在此过程中过早调用functions.php。显然,functions.php被认为是“ WordPress库”的一部分,并加载到wp-blog-header.php第13行中,而模板在第19行中被调用。
介于两者之间的是wp()函数,该函数设置查询。该查询实际上是在user.php行1198-1212中设置的:
$args = array(
'post_type' => $this->post_type,
'post_name__in' => array( $this->request_type ),
'posts_per_page' => $posts_per_page,
'offset' => isset( $_REQUEST['paged'] ) ? max( 0, absint( $_REQUEST['paged'] ) - 1 ) * $posts_per_page : 0,
'post_status' => 'any',
's' => isset( $_REQUEST['s'] ) ? sanitize_text_field( $_REQUEST['s'] ) : '',
);
...
$requests_query = new WP_Query( $args );
要回答我的第二个问题(WordPress如何知道这是一个搜索),就像使用“ s =“查询字符串参数一样简单。如果您想要的搜索结果没有搜索字符串,则不确定该怎么做(例如,仅基于下拉菜单或类似内容的自定义搜索)。如果需要,我建议您查看源文件WP-query.php,并确切地了解您需要传递的内容。不要害怕看源代码;很有教育意义!