是否在搜索页面上未调用WP_enQueue_脚本?

时间:2016-02-18 作者:Joel Murphy

我写了一个自定义主题。这相当复杂,所以为了大家的理智,我不会在这里发布一个巨大的代码块。

在我的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. 非常奇怪!

enter image description here

enter image description here

enter image description here

从上面的截图可以看出,只要我删除标题。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/Z0DwDd20

Edit #4:现在该睡觉了,所以我想明天我会再试试这个。以下是主题文件,以防有人感兴趣:https://drive.google.com/folderview?id=0B1zYR-LjR-j9NFV2ZXg3V0NJblk&usp=sharing

3 个回复
SO网友:bedman

使用时wp_enqueue_script, 你可能会通过true 对于in_footer 参数如果是,请检查search.php 正在呼叫get_footer() 功能位于底部。

SO网友:Stephen

作为对您问题的部分回答,我可以解释您对删除头文件的困惑。这个wp_enqueue_scripts 钩子在wp_head(), 一定在你的header.php 文件您的虚拟头文件不包含此项,因此整个DA_script_enqueue 函数根本没有运行。删除标题时。php文件,WordPress使用默认值,其中包括wp_head.

对于最初的问题,您需要回到原点,一次调试一点,但不要丢失wp_head() 作用

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 还包含导航菜单之类的功能,其中大多数功能都可以通过过滤器过滤。这可能是因为其中一个函数使用了错误的筛选器。如果以上两个要点都没有结果,请逐个删除这些函数,以确定坏处。一旦你有了坏苹果,就很容易通过查看源代码来确定它使用的过滤器,然后在主题的函数文件中查找这些自定义过滤器

  • 相关推荐

    make link to search page

    我在我的网站的菜单部分有一个搜索图标,正在寻找一种方法,当用户单击此搜索图标时,可以重定向到搜索页面。在搜索页面中,有一个搜索表单,搜索结果也显示在此页面中。是否可以在不更改搜索url的情况下创建指向搜索页面的链接?不幸的是this 链接我没有找到正确的答案。谢谢