问题描述
据我所知,管理员脚本应该通过 admin_enqueue_scripts
钩子和 wp_enqueue_scripts
中的所有其他脚本进行注册和排入,因此我已经设置了以下功能,以清晰有序的方式注册和排队所有脚本。
我的问题是,如果我在管理员和前端需要某些脚本 (例如 jquery validate 插件) 怎么办?在这种情况下,建议注册和排队脚本的方法是什么?注册两次不同的 $句柄或仅通过 wp_enqueue_scripts
注册,如果是,是否有风险,在被要求时不被调用? (我的意思是,为什么还有 admin_enqueue_scripts
如果不能让这些脚本在更早的时间可用?
我真的非常感谢有人向我解释这一点,以充分了解 wp 中排列脚本的细微差别。谢谢
我的代码:
// REGISTER ALL NON-ADMIN SCRIPTS
add_action( 'wp_enqueue_scripts', 'register_all_non_admin_scripts' );
function register_all_non_admin_scripts() {
wp_register_script( ... );
wp_register_script( ... );
}
// ENQUEUE NON-ADMIN SCRIPTS CONDITIONALLY
add_action( 'wp_enqueue_scripts', 'enqueue_scripts_where_required' );
function enqueue_scripts_where_required() {
// scripts to be loaded at all times
wp_enqueue_script( '' );
// scripts to be loaded conditionaly
if( is_page( '' ) ) {
wp_enqueue_style( '' );
}
}
// REGISTER ALL ADMIN SCRIPTS
add_action( 'admin_enqueue_scripts', 'register_all_admin_scripts' );
function register_all_admin_scripts(){
wp_register_script( ... );
wp_register_script( ... );
}
// ENQUEUE ADMIN SCRIPTS
add_action( 'admin_enqueue_scripts', 'enqueue_admin_contact_cpt_js' );
function enqueue_admin_contact_cpt_js(){
global $post_type;
// scripts to be loaded at all times
wp_enqueue_script( '' );
// scripts to be loaded conditionaly by post type
if( 'contact' == $post_type ){
wp_enqueue_script( '' );
...
}
}
最佳解决方案
您可以提前注册脚本,例如在 wp_loaded
上:
add_action( 'wp_loaded', 'register_all_scripts' );
function register_all_scripts()
{
wp_register_script(...);
}
然后,只要您需要,就排队脚本:
add_action( 'wp_enqueue_scripts', 'enqueue_front_scripts' );
add_action( 'admin_enqueue_scripts', 'enqueue_back_scripts' );
使用相同的句柄和名称来避免与其他脚本的冲突。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。