問題描述

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