未调用WP_ENQUEUE_SCRIPTS挂接

时间:2014-03-16 作者:Julian F. Weinert

我将以下代码添加到functions.php:

if(!function_exists(\'bi_frontend_scripts\')) {
    function bi_frontend_scripts() {
        wp_enqueue_script(\'jquery\');
        // I originally wanted to do:
        wp_enqueue_script(\'jQuery.bxSlider\', get_bloginfo(\'template_url\').\'/scripts/jquery.bxslider/jquery.bxslider.min.js\', array(\'jquery\'));
    }
}
add_action(\'wp_enqueue_scripts\', \'bi_frontend_scripts\');
但显然,这两个脚本都没有排队。我不知道我的问题是什么,所以我添加了这个脚本以了解钩子是否被调用:

function aal_handler() {
    static $list = array();
    // exclude certain actions:
    $exclude = array(\'gettext\', \'gettext_with_context\');

    $action = current_filter();

    if(!in_array($action, $exclude)) {
        $list[] = $action;
    }
    // shutdown is the last action
    if (\'shutdown\' == $action) {
        print \'<pre>\' . implode( "\\n", $list ) . \'</pre>\';
    }
}
add_action(\'all\', \'aal_handler\', 99999, 99);
在列表中wp_enqueue_scripts 不显示。那为什么不叫钩子?!

3 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

您的代码是正确的,但如果函数名已经被使用,我不会添加回调。如果其他人使用了该名称,您不知道您可能会添加什么。

if(!function_exists(\'bi_frontend_scripts\')) {
    function bi_frontend_scripts() {
        wp_enqueue_script(\'jquery\');
        // I originally wanted to do:
        wp_enqueue_script(\'jQuery.bxSlider\', get_bloginfo(\'template_url\').\'/scripts/jquery.bxslider/jquery.bxslider.min.js\', array(\'jquery\'));
    }
    add_action(\'wp_enqueue_scripts\', \'bi_frontend_scripts\');
}
我还测试了你的“钩子转储”功能--aal_handler()-- 这是可行的。wp_enqueue_scripts 是输出的一部分。

我不得不得出结论,这个主题有问题。wp_enqueue_scripts is hooked to wp_head, 在wp_head() function. 最明显的可能性是您的主题没有使用wp_head() 正确,或者根本不正确。另一种遥远的可能性是,有东西删除了您的回调,例如:

remove_all_filters(\'wp_enqueue_scripts\');

SO网友:ban-geoengineering

对于任何在admin 第页,使用admin_enqueue_scripts 钩子而不是wp_enqueue_scripts

Documentation here.

SO网友:WpMania.Net

我再次为您提供了大量信息,以便您了解wp_enqueue_scripts.

您需要知道wp_enqueue_scripts. 参见以下挂钩顺序:

加载的多插件分类法/li>

  • init
  • widgets\\u initregister\\u sidebarwp\\u register\\u sidebar\\u widgetwp\\u default\\u scriptswp\\u default\\u stypesadmin\\u initadd\\u admin\\u bar\\u菜单wp\\u加载解析请求
  • 发送\\u头
  • 解析查询pre\\u get\\u posts
  • posts\\u selection
  • wp
  • 模板重定向
  • get\\u header
  • wp\\u headwp_enqueue_scripts
  • wp\\u print\\u样式。。。等等

    您可以将其添加到init 钩子,这样做将被称为比下面的列表更高的优先级。

    如果没有加载文件,可以使用更高优先级的挂钩。

    如果您的wp_enqueue_script 没有被调用,您可以使用这个简单的技巧让它为您的主题或插件工作。

    <?php
    
    if(!function_exists(\'bi_frontend_scripts\')) {
        function bi_frontend_scripts() {
            wp_enqueue_script(\'jquery\');
            // I originally wanted to do:
            wp_enqueue_script(\'jQuery.bxSlider\', get_bloginfo(\'template_url\').\'/scripts/jquery.bxslider/jquery.bxslider.min.js\', array(\'jquery\'));
        }
    
        add_action( \'init\', \'bi_frontend_scripts\' );
    }
    
    
    ?>
    

    结束

    相关推荐

    WordPress何时自动将jQuery入队?

    我理解WordPressALWAYS 将jQuery在所有主题上排队,因此可以将另一个具有相同版本的jQuery排队。然而,在开发一个主题时,出于测试目的,我将其移动到了一个子域(同一个域,另一个WP安装,除了“Hello World”帖子外,没有其他内容)。当第一个正常地将jQuery排队时,第二个停止了一些功能,我发现WordPress不再自动包含jQuery。问题是:WordPress是否会等待一些东西(不知道,可能是小部件区域、菜单等上的最小小部件)来调用脚本?要确保这一点,我是否必须手动将本机j