问题描述

据我所知,管理员脚本应该通过 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。