WordPress is_search()函数始终为假

时间:2018-12-04 07:15:53

标签: wordpress

我想在WordPress搜索结果页面上添加一些自定义条件并做其他事情。因此,我正在检查is_search()的值以确保仅在正确的时间应用该条件。因此,在我的孩子主题的functions.php中,我输入:

if (is_search()) {
  ...
}

但这总是返回false,即使使用http://mysite/?s=something这样的URL,也正在使用我主题的search.php模板!从functions.php调用这无效吗,还是我误解了此函数的用途?

为此,看看像https://wphierarchy.com所示的模板层次结构,WP怎么会知道它是一个搜索结果页面?如何知道沿着“搜索结果”路径前进?我花了一些时间仔细阅读源代码,但仍找不到合适的位置。

1 个答案:

答案 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,并确切地了解您需要传递的内容。不要害怕看源代码;很有教育意义!