Enregistrez un script à mettre en file d'attente à la fois dans l'admin et le front end

12

Si je comprends bien, les scripts d'administration sont censés être enregistrés et mis en file d'attente via le admin_enqueue_scriptscrochet et tous les autres scripts sur wp_enqueue_scriptsdonc j'ai mis en place les fonctions suivantes pour enregistrer et mettre en file d'attente tous mes scripts de manière claire et organisée.

Ma question est, que se passe-t-il si j'ai besoin de certains scripts (par exemple, le plugin de validation jquery ) à la fois dans l'administration et sur le front-end? quelle est la méthode recommandée pour l'enregistrement et la mise en file d'attente du script dans ce cas? enregistrez-le deux fois avec une poignée $ différente ou enregistrez-le wp_enqueue_scriptsuniquement et si oui, n'y a-t-il pas le risque qu'il ne soit pas appelé en cas de besoin? (Je veux dire, pourquoi d'autre existerait- admin_enqueue_scriptsil si ce n'était de rendre ces scripts disponibles plus tôt?

J'apprécierais vraiment que quelqu'un m'explique cela pour bien comprendre les nuances de la mise en file d'attente des scripts dans wp. Merci

Mon code:

// 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
la source

Réponses:

10

Vous pouvez enregistrer les scripts plus tôt, par exemple sur wp_loaded:

add_action( 'wp_loaded', 'register_all_scripts' );

function register_all_scripts() 
{
    wp_register_script(...);
}

Et puis vous mettez les scripts en file d' attente chaque fois que vous en avez besoin:

add_action( 'wp_enqueue_scripts', 'enqueue_front_scripts' );
add_action( 'admin_enqueue_scripts', 'enqueue_back_scripts' );

Utilisez les mêmes poignées et noms pour éviter les collisions avec d'autres scripts.

fuxia
la source
je suppose que cela résoudrait le problème pour les scripts à utiliser à la fois dans l'admin et le front end oui; je vais ajouter une autre fonction pour ces cas. merci @toscho
Ronnieinspain