Cum pot include JavaScript care folosește jQuery în panoul de administrare WordPress

23 mai 2012, 13:06:30
Vizualizări: 16.8K
Voturi: 3

Am încercat asta:

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>';
 }

dar în acest fel nu recunoaște jQuery. Așa că primesc eroarea Uncaught ReferenceError: jQuery is not defined.
Cred că asta se întâmplă pentru că jQuery este încărcat după scriptul meu. După cum văd în codul sursă 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>

Cum pot rezolva această problemă?

0
Toate răspunsurile la întrebare 2
0

Problema este că încarci scriptul înainte ca jQuery să fie încărcat.

Nu tipări scripturile direct.

Ar trebui (să le înregistrezi și apoi) să le adaugi în coadă folosind API-ul furnizat. jQuery este deja un script înregistrat, așa că poți pur și simplu să-l adaugi în coadă (de exemplu, pe hook-ul admin_enqueue_scripts).

Totuși, ai nevoie să încarci jQuery doar dacă încarci un script personalizat care îl necesită, caz în care ar trebui să adaugi scriptul tău personalizat în coadă și să adaugi jQuery ca dependență. WordPress se va ocupa apoi de încărcarea scripturilor în ordinea corectă:

add_action('admin_enqueue_scripts','wptuts53021_load_admin_script');
function wptuts53021_load_admin_script( $hook ){
    wp_enqueue_script( 
        'wptuts53021_script', //handle unic
        get_template_directory_uri().'/admin-scripts.js', //locație
        array('jquery')  //dependințe
     );
}

Observații secundare

  • Folosește get_template_directory_uri() în loc de get_bloginfo()
  • Folosește parametrul $hook (care va fi edit.php, post.php, post-new.php etc.) și get_current_screen() pentru a determina dacă te afli pe o pagină care necesită încărcarea scriptului tău. Încarcă scripturile doar atunci când ai nevoie de ele.

Exemplu (din Codex):

function my_enqueue($hook) {
    //Încarcă doar pe paginile edit.php
    //Poți folosi get_current_screen pentru a verifica tipul de postare
    if( 'edit.php' != $hook )
        return;
    wp_enqueue_script( 'my_custom_script', plugins_url('/myscript.js', __FILE__) );
}
add_action( 'admin_enqueue_scripts', 'my_enqueue' );
23 mai 2012 13:25:54
0

În primul rând, să le includem într-un mod corespunzător.

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');
  }

}

În al doilea rând, citește mai multe informații aici http://wpcandy.com/teaches/how-to-load-scripts-in-wordpress-themes

23 mai 2012 13:32:51