Come includere JavaScript che usa jQuery nella parte admin
Provo questo:
add_action('admin_print_scripts', 'custom_admin_scripts' );
function custom_admin_scripts() {
echo '<script type="text/javascript" src="' . get_bloginfo('stylesheet_directory') . /admin-scripts.js"></script>';
}
ma in questo modo non riconosce jQuery. Quindi ottengo Uncaught ReferenceError: jQuery is not defined
.
Penso che sia perché jQuery viene caricato dopo il mio script. Come vedo nel sorgente HTML:
<script type="text/javascript" src="http://localhost:8080/wp-test/wp-content/themes/test/admin-scripts.js"></script>
<script type="text/javascript" src="http://localhost:8080/wp-test/wp-admin/load-scripts.php?c=1&load=jquery,utils&ver=edec3fab0cb6297ea474806db1895fa7"></script>
Come posso risolvere?

Il problema è che stai caricando il tuo script prima che jQuery sia stato caricato.
Non stampare gli script direttamente.
Dovresti (registrare e poi) accodarli utilizzando l'API fornita. jQuery è già uno script registrato, quindi puoi semplicemente accodarlo (ad esempio sull'hook admin_enqueue_scripts
).
Tuttavia, hai bisogno di caricare jQuery solo se stai caricando uno script personalizzato che lo richiede, nel qual caso dovresti accodare il tuo script personalizzato e aggiungere jQuery come dipendenza. WordPress gestirà poi il caricamento degli script nell'ordine corretto:
add_action('admin_enqueue_scripts','wptuts53021_load_admin_script');
function wptuts53021_load_admin_script( $hook ){
wp_enqueue_script(
'wptuts53021_script', //handle univoco
get_template_directory_uri().'/admin-scripts.js', //posizione
array('jquery') //dipendenze
);
}
Osservazioni aggiuntive
- Usa
get_template_directory_uri()
invece diget_bloginfo()
- Usa l'
$hook
passato (che saràedit.php
,post.php
,post-new.php
ecc.) eget_current_screen()
per determinare se ti trovi in una pagina che richiede il caricamento del tuo script. Carica gli script solo quando ne hai effettivamente bisogno.
Esempio (dal Codex):
function my_enqueue($hook) {
//Carica solo nelle pagine edit.php
//Puoi usare get_current_screen per verificare il post type
if( 'edit.php' != $hook )
return;
wp_enqueue_script( 'my_custom_script', plugins_url('/myscript.js', __FILE__) );
}
add_action( 'admin_enqueue_scripts', 'my_enqueue' );

Innanzitutto, includiamoli nel modo corretto.
add_action( 'wp_enqueue_scripts', 'custom_admin_scripts' );
function custom_admin_scripts() {
wp_register_script( 'admin-scripts', get_template_directory_uri() . '/js/admin-scripts.js', array('jquery'), '1.0', true );
if ( is_admin() ) {
wp_enqueue_script('admin-scripts');
}
}
In secondo luogo, leggi qui http://wpcandy.com/teaches/how-to-load-scripts-in-wordpress-themes
