将管理脚本排入队列

时间:2015-03-04 09:03:46

标签: php wordpress wordpress-plugin

我使用此代码将我的脚本包含在我的插件的管理页面中:

add_action('admin_enqueue_scripts', 'enqueue_my_scripts');

function enqueue_my_scripts() {
    wp_enqueue_script('jquery');

    wp_enqueue_script('jquery-ui');
    wp_enqueue_script('jquery-ui-tabs');
    wp_enqueue_script('jquery-ui-sortable');
}

它有效,但jquery正被添加到<head>标记,而所有其他脚本都添加到<body>标记的底部。

我想在插件管理页面的头部包含所有脚本。

有没有办法告诉wordpress将它们包含在head而不是body

3 个答案:

答案 0 :(得分:2)

您希望它在标题中加载的任何特殊原因?页脚与任何地方一样好,并确保它们以正确的顺序加载。

但由于总有特殊情况 - 这里是解决方案。 您需要取消注册每个脚本,因为它们最初注册时放在正文中。所以对于每个脚本:

wp_deregister_script('jquery-ui-sortable');
wp_enqueue_script('jquery-ui-sortable', site_url('/wp-includes/js/jquery/ui/jquery.ui.sortable.min.js'), array('jquery', 'jquery-ui'), '1.11.2', false);

(当然,您可能需要调整这些变量,例如版本号或文件位置,具体取决于您的安装)

使这项工作成为最后一个变量,&#34; false&#34;: http://codex.wordpress.org/Function_Reference/wp_enqueue_script

  

$ in_footer(boolean)(可选)通常,脚本放在   HTML文档。如果此参数为true,则放置脚本   在结束标记之前。这要求主题具有   wp_footer()模板标记在适当的位置。默认值:false

编辑:根据要求,您可以在不使用任何路径或版本的情况下使用脚本执行此操作。

基本上,我们使用wordpress注册脚本,从wordpress&#39;复制脚本的源代码和版本。脚本全局,然后我们取消注册脚本,然后再次注册它,而不将其放在页脚中。

这是一个更新版本,可以处理您需要的所有脚本:

// Add your script names to this array.
$scripts = array('jquery-ui-sortable', 'jquery-ui-tabs', 'jquery-ui-sortable');
// Register the original scripts.
foreach($scripts as $script) {
    wp_enqueue_script($script);
}
// This global contains all of wordpress' registered scripts.
global $wp_scripts;
$sources = array();
// Loop through the registered scripts, copy the data we need.
foreach($wp_scripts->registered as $name => $data) {
    if(in_array($name, $scripts)) {
        $sources[$name]['src'] = $data->src;
        $sources[$name]['ver'] = $data->ver;
        $sources[$name]['deps'] = $data->deps;
    }
}
// Loop through our selected scripts, deregister them, then register
// them again, only this time using 'false' to put them in the head.
foreach($scripts as $script) {
    wp_deregister_script($script);
    wp_enqueue_script(
        $script,
        site_url($sources[$script]['src']),
        $sources[$script]['deps'],
        $sources[$script]['ver'],
        false
    );
}

答案 1 :(得分:0)

你应该像这样排队你的脚本:

add_action('admin_enqueue_scripts', 'enqueue_my_scripts');

function enqueue_my_scripts() {

    $dependencies = array('jquery-ui','jquery-ui-tabs','jquery-ui-sortable');
    $in_footer = false;

    wp_enqueue_script( 
        $your_script_handle, 
        $source_of_your_script, 
        $dependencies, $version, $in_footer
    );

}

$ in_footer是告诉wordpress是否在脚注或页面头部排队脚本的参数。如果设置为true,脚本将在页脚中呈现,如果设置为false,则会在头部呈现。

如果您希望将'jquery-ui','jquery-ui-tabs','jquery-ui-sortable'与您的插件一起呈现,那么这意味着您的插件有一些dependencies

$dependencies变量是指包含脚本所需依赖项的数组。如果您的脚本需要更多依赖项,请添加更多内容。

如果您的脚本没有特定版本,

$ version可以像$version = ''一样留空。

默认情况下,脚本需要的依赖项(特别是您的情况)随WordPress一起提供。你只需要将它们排队。

答案 2 :(得分:0)

以下是wordpress Codex的代码。

<?php wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer ); ?>

所以在你的情况下,它变成,

<?php wp_enqueue_script('jquery', NULL , array(),NULL , FALSE );?>

如果你有其他的js文件,只需添加FALSE作为最后一个参数,它应该在头文件中加载它。如果他们是依赖的,那么使用这样的依赖。

修改

<?php wp_enqueue_script('somejs', 'http://example.com/wp-content/plugins/test/js/some.js', array( 'jquery' ),'1.0.0', FALSE );?>