Wp_enQueue_script()总是在wp_footer()中加载它们?

时间:2012-07-25 作者:Paul

这是我放在函数中的示例代码。php:

function my_init_method() {
    wp_enqueue_script(\'jquery\');
    wp_enqueue_script(\'jquery-ui-core\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-widget\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-mouse\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-accordion\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-slider\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-tabs\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-sortable\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-draggable\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-droppable\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-selectable\', false, array(\'jquery\'), false, false);
    //wp_enqueue_script(\'jquery-ui-datepicker\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-resizable\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-dialog\', false, array(\'jquery\'), false, false);
    //wp_enqueue_script(\'jquery-ui-button\', false, array(\'jquery\'), false, false);
}
add_action(\'init\', \'my_init_method\');
以下是参考资料:http://codex.wordpress.org/Function_Reference/wp_enqueue_script

为什么要加载除jQuery之外的所有脚本wp_footer() 而不是wp_head()? 我将最后一个参数设置为false. 我也试过了true 我尝试完全删除以下参数:wp_enqueue_script(\'jquery-ui-core\');. 然而,它们总是在页脚中加载。

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

所有这些脚本都已注册为在页脚中打印。看见wp-includes/script-loader.php 有关详细信息。当您再次尝试注册脚本时,WordPress不会改变这一点。

解决方法是为注册一个新脚本wp_head 将这些脚本作为依赖项(的第三个参数wp_enqueue_script()).

不要在WP执行之前以其他顺序注册脚本!这将影响wp-admin 可能还有其他页面。

但真正的问题是:为什么需要这么早加载脚本?改为修复该问题。我的猜测是:您正在使用一些内联脚本,不要等到文档加载完毕。这几乎没有必要。

还要注意的是$not WordPress中的jQuery对象。你必须使用jQuery( function( $ ) { /* your code with $ here. */ }.

SO网友:valscion

正如其他人所指出的,你需要wp_enqueue_scripts. 您还需要在WordPress的任何其他部分将脚本排入队列之前将其排入队列,因为wp_enqueue_script() “如果尚未包含脚本,则包含该脚本”。如果脚本已经包含在内,我相信您将无法将其位置从页脚更改为页首。

因此,工作代码可以如下所示:

function my_enqueue_scripts_method() {
    wp_enqueue_script(\'jquery\');
    wp_enqueue_script(\'jquery-ui-core\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-widget\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-mouse\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-accordion\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-slider\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-tabs\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-sortable\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-draggable\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-droppable\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-selectable\', false, array(\'jquery\'), false, false);
    //wp_enqueue_script(\'jquery-ui-datepicker\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-resizable\', false, array(\'jquery\'), false, false);
    wp_enqueue_script(\'jquery-ui-dialog\', false, array(\'jquery\'), false, false);
    //wp_enqueue_script(\'jquery-ui-button\', false, array(\'jquery\'), false, false);
}
add_action(\'wp_enqueue_scripts\', \'my_enqueue_scripts_method\', 1);
编辑:但正如@toscho所说,这只是修复了您处理自己脚本的最可能的坏方法。应该将这些内容加载到页脚中,以获得最佳性能。

结束