Cómo incluir JavaScript con jQuery en el área de administración de WordPress
Intento esto:
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>';
}
pero de esta manera no reconoce jQuery. Entonces obtengo Uncaught ReferenceError: jQuery is not defined
.
Creo que es porque jQuery se carga después de mi script. Como veo en el código fuente 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>
¿Cómo puedo solucionarlo?

El problema es que estás cargando tu script antes de que jQuery se haya cargado.
No imprimas scripts directamente.
Deberías (registrar y luego) encolarlos usando la API proporcionada. jQuery ya es un script registrado, por lo que solo necesitas encolarlo (por ejemplo, en el hook admin_enqueue_scripts
).
Sin embargo, solo necesitas cargar jQuery si estás cargando un script personalizado que lo requiera, en cuyo caso deberías encolar tu script personalizado y añadir jQuery como dependencia. WordPress entonces manejará la carga de los scripts en el orden correcto:
add_action('admin_enqueue_scripts','wptuts53021_load_admin_script');
function wptuts53021_load_admin_script( $hook ){
wp_enqueue_script(
'wptuts53021_script', //identificador único
get_template_directory_uri().'/admin-scripts.js', //ubicación
array('jquery') //dependencias
);
}
Observaciones adicionales
- Usa
get_template_directory_uri()
en lugar deget_bloginfo()
- Utiliza el parámetro
$hook
pasado (que seráedit.php
,post.php
,post-new.php
, etc.) yget_current_screen()
para determinar si estás en una página que requiera que tu script se cargue. Solo carga scripts cuando realmente los necesites.
Ejemplo (del Codex):
function my_enqueue($hook) {
//Cargar solo en páginas edit.php
//Puedes usar get_current_screen para verificar el tipo de post
if( 'edit.php' != $hook )
return;
wp_enqueue_script( 'my_custom_script', plugins_url('/myscript.js', __FILE__) );
}
add_action( 'admin_enqueue_scripts', 'my_enqueue' );

Primero, vamos a incluirlos de manera adecuada.
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');
}
}
Segundo, lee esto http://wpcandy.com/teaches/how-to-load-scripts-in-wordpress-themes
