Cum pot include JavaScript care folosește jQuery în panoul de administrare WordPress
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&load=jquery,utils&ver=edec3fab0cb6297ea474806db1895fa7"></script>
Cum pot rezolva această problemă?

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 deget_bloginfo()
- Folosește parametrul
$hook
(care va fiedit.php
,post.php
,post-new.php
etc.) șiget_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' );

Î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
