我写了一个自定义主题。这相当复杂,所以为了大家的理智,我不会在这里发布一个巨大的代码块。
在我的functions.php
文件I调用了以下挂钩:
function DA_script_enqueue() {
if( is_404() ){
//load scripts with wp_enqueue_script()
}
if( is_search() ){
//load scripts with wp_enqueue_script()
}
}
add_action( \'wp_enqueue_scripts\', \'DA_script_enqueue\');
当我的主题被激活时,我的wordpress网站上发生的事情是没有脚本被添加到
search.php
页面,但他们
do 添加到
404.php
页面非常奇怪!事实上,即使杀死页面也不能
die();
if( is_search() ){
die(\'it works\');
}
这让我想到,在钩子覆盖中,条件永远不会满足
wp_enqueue_scripts
. 我不确定这是一个bug,还是我的逻辑不正确,调用了错误的函数。我还能做些什么来让我的逻辑工作呢?
谢谢
Edit:好的,更新一下:我刚刚在另一个主题中尝试了上述代码DOES 做它应该做的!我想我现在应该问的问题是,我能做些什么来确保is_search()
退货true
? 到目前为止,我已禁用all 插件并删除了query_posts()
从索引调用。php,但仍面临问题:(
Edit #2:经过9个小时的调试,我终于找到了导致问题的原因(但还没有解决方案!)
我创建了一个测试wordpress站点,并复制了我的自定义主题文件。我一个接一个地删除了它们,直到我有了一个主题所需的最少文件,我才发现问题的根源。似乎有一个header.php
文件制造商is_search()
回来false
. 非常奇怪!
从上面的截图可以看出,只要我删除标题。php文件一切正常
is_search()
返回true。
到底是什么导致了这个非常奇怪的问题?我有一个标题的其他主题。php文件,它们工作正常。。。
我将继续处理此问题,但以下是我的源文件,以防万一:
search.php
:
<?php get_header(); ?>
search page
<?php get_footer(); ?>
functions.php
:
<?php
// This function will load certain scripts on certain pages - saving on bandwidth and server resourses.
function init_scripts()
{
if ( is_search() ) {
die(\'Yes this is the search page loading from the init_scripts function\');
}
}
add_action( \'wp_enqueue_scripts\', \'init_scripts\' );
?>
header.php
:
header
Edit #3:以下是的输出
$wp_query
而且
http://pastebin.com/Z0DwDd20Edit #4:现在该睡觉了,所以我想明天我会再试试这个。以下是主题文件,以防有人感兴趣:https://drive.google.com/folderview?id=0B1zYR-LjR-j9NFV2ZXg3V0NJblk&usp=sharing
SO网友:Pieter Goosen
这个var_dump
从主查询可以看出,is_search()
按应返回true。此外,SQL查询对于搜索页面看起来也很好。
这进一步加深了我的怀疑,即在主查询成功执行之后,有什么东西正在改变它,而这种情况很可能发生在wp_enqueue_scripts
.
最可能的罪魁祸首是query_posts
. 我记得不久前有人遇到过这样的问题,结果是YOAST插件(IIRC)使用了query_posts
或者一些坏的过滤器之类的东西,通过停用插件解决了这个问题。
你最好从这里开始,搜索你的主题query_posts
如果有query_posts
. 如果它不在主题中,您需要查看您的插件。逐个停用插件,并在停用每个插件后进行测试。你应该能用这种方法找到罪犯
编辑尝试在上重置主查询wp_enqueue_scripts
然后检查样式和脚本是否已从操作中排队。如果是,那意味着is_search()
返回true,其中99.9%确认使用query_posts
主题或插件中的某个位置。
NOTE: 这只是一个测试not 解决方案
add_action( \'wp_enqueue_scripts\', function ()
{
wp_reset_query();
}, 9 );
编辑2我刚刚意识到你已经停用了所有插件。如您所述,当您删除
header.php
, 你的结果还可以。
Debugging
不幸的是,您链接到的文件没有帮助,因为它基本上只是您主题文件夹中的所有主题,但这里有一些基本的调试信息
代码编辑器有很好的搜索功能,可以用来搜索主题中所有文件中的特定字符串。我将首先搜索query_posts
, 特别是在函数文件中,因为问题似乎是由挂接到位于标头中的操作挂钩或实际挂接到wp_head
header.php
房屋wp_head()
函数,它只是wp_head
行动有许多动作挂钩wp_enqueue_scripts
)连接到wp_head
. 检查this post 为了得到一份wp_head
. 作为快速调试检查,以检查问题是否由连接到wp_head
在进行白费力气的追逐之前,只需删除wp_head()
并检查is_search()
条件显然,如果is_search()
然后返回true,一些wp_head
是导致问题的原因。header.php
还包含导航菜单之类的功能,其中大多数功能都可以通过过滤器过滤。这可能是因为其中一个函数使用了错误的筛选器。如果以上两个要点都没有结果,请逐个删除这些函数,以确定坏处。一旦你有了坏苹果,就很容易通过查看源代码来确定它使用的过滤器,然后在主题的函数文件中查找这些自定义过滤器