Come includere JavaScript che usa jQuery nella parte admin

23 mag 2012, 13:06:30
Visualizzazioni: 16.8K
Voti: 3

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&amp;load=jquery,utils&amp;ver=edec3fab0cb6297ea474806db1895fa7"></script>

Come posso risolvere?

0
Tutte le risposte alla domanda 2
0

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 di get_bloginfo()
  • Usa l'$hook passato (che sarà edit.php, post.php, post-new.php ecc.) e get_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' );
23 mag 2012 13:25:54
0

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

23 mag 2012 13:32:51