将脚本作为依赖项添加到已注册的脚本

时间:2013-05-25 作者:Stephen Harris

wp_register_script() (参见codex) 允许您指定依赖项:在加载要注册的脚本(如果已加载)之前必须加载的脚本。

但是假设脚本是第三方脚本(WordPress或其他插件),因此您不是调用它的人wp_register_script(). 如何将脚本作为预注册脚本的依赖项注入?

Remarks: 在我的特定用例中,依赖关系并不严格-注册的脚本不需要第二个脚本,但后者会更改原始脚本。

对于风格也可以问类似的问题,但我怀疑答案几乎是一样的。

2 个回复
SO网友:Stephen Harris

挖掘https://github.com/WordPress/WordPress/blob/3.5.1/wp-includes/class.wp-dependencies.php 所有注册的脚本都存储在全局$wp_scripts.

您可以通过它直接访问它们,但我更喜欢在API存在时使用它。在这种情况下,$wp_scripts->query() 返回特定的注册脚本(a_WP_Dependency 对象-see source).

A._WP_Dependency 对象将依赖项存储为句柄数组,您可以直接访问这些句柄并插入依赖项。以下函数用于:

/**
 * Add $dep (script handle) to the array of dependencies for $handle
 * @see http://wordpress.stackexchange.com/questions/100709/add-a-script-as-a-dependency-to-a-registered-script
 * @param string $handle Script handle for which you want to add a dependency
 * @param string $dep Script handle - the dependency you wish to add
 */
function wpse100709_append_dependency( $handle, $dep ){
    global $wp_scripts;

    $script = $wp_scripts->query( $handle, \'registered\' );
    if( !$script )
        return false;

    if( !in_array( $dep, $script->deps ) ){
        $script->deps[] = $dep;
    }

    return true;
}
显然,您必须在原始脚本之间添加此内容($handle) 正在注册并且正在排队。

示例用法script_a 已在上注册init 使用优先级10挂钩,然后您要添加script_b 作为依赖项:

add_action( \'init\', \'wpse100709_register_script_b\', 11 );
function wpse100709_register_script_b(){

   //Register script b
   wp_register_script( \'script_b\', ... );

   //Now add script b as being a pre-requisite for script a
   wpse100709_append_dependency( \'script_a\', \'script_b\' )

   //If script a is enqueued, script b is enqueued before it.

}

SO网友:Rarst

注册后,没有指定的方法更改已注册脚本/样式依赖项的详细信息。您的选择包括:

取消注册并使用所需数据再次注册相应全局变量中的数据修改以其他方式处理计时,例如手动输出和挂钩优先级

结束

相关推荐

ADMIN_ENQUEUE_SCRIPTS未正确呈现JS文件

我会保持简短,我想在管理面板中加载一个JS文件作为插件的一部分,通过大量的研究,我有几个不同的选项,这些选项都以没有其他人会遇到的相同问题结束,所以最后我在这里发布了一个解决方案。当我使用以下代码时,我得到一个错误:function register_scripts(){ wp_register_script(\'payee\',plugins_url(\'iBudget/modules/payee/payee.js\',__FILE__)); } function pay