問題描述
據我所知,管理員指令碼應該透過 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。