Зарегистрируйте скрипт для постановки в очередь как администратора, так и внешнего интерфейса.

12

Насколько я понимаю, административные сценарии должны регистрироваться и ставиться в очередь через 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( '' );
    ...
}
}
Ronnieinspain
источник

Ответы:

10

Вы можете зарегистрировать сценарии ранее, например, на 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' );

Используйте те же дескрипторы и имена, чтобы избежать конфликтов с другими скриптами.

Фуксия
источник
Я думаю, это решило бы проблему для сценариев, которые будут использоваться как в админке, так и во внешнем интерфейсе. Я добавлю еще одну функцию для этих случаев. спасибо @toscho
Ronnieinspain