¿Cómo puedo incluir JavaScript que use jQuery en el lado de administración?

2

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 está vinculado después de mi script. Como veo en la fuente HTML:

<script type="text/javascript" src="http://localhost:8080/wp-test/wp-content/themes/test/admin-scripts.js"></script><scripttype="text/javascript" src="http://localhost:8080/wp-test/wp-admin/load-scripts.php?c=1&amp;load=jquery,utils&amp;ver=edec3fab0cb6297ea474806db1895fa7"></script>

¿Cómo puedo solucionarlo?

    
pregunta s976 23.05.2012 - 12:06

2 respuestas

7

El problema es que estás cargando tu script antes de que se haya cargado jQuery.

No imprimir scripts directamente .

Debería (registrarse y luego) ponerlos en cola usando la API proporcionada. jQuery ya es un script registrado, por lo que solo puedes ponerlo en cola (por ejemplo, en el admin_enqueue_scripts hook).

Sin embargo, solo necesita cargar jQuery si está cargando un script personalizado que lo requiere, en cuyo caso debe poner en cola su script personalizado y agregar jQuery como una dependencia. WordPress manejará la carga de los scripts y en el orden correcto:

add_action('admin_enqueue_scripts','wptuts53021_load_admin_script');
function wptuts53021_load_admin_script( $hook ){
    wp_enqueue_script( 
        'wptuts53021_script', //unique handle
        get_template_directory_uri().'/admin-scripts.js', //location
        array('jquery')  //dependencies
     );
}

Observaciones laterales

  • Use get_template_directory_uri() en lugar de get_bloginfo()
  • Use el $hook aprobado (que será edit.php , post.php , post-new.php , etc.) y get_current_screen() para determinar si estás en una página que requiere que se cargue tu script. Solo cargue scripts cuando realmente los necesite.

E.g (ejemplo de Codex):

function my_enqueue($hook) {
    //Load only on edit.php pages
    //You can use get_current_screen to check 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' );
    
respondido por el Stephen Harris 23.05.2012 - 12:25
0

Primero, incluyámoslos de una 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 aquí enlace

    
respondido por el Daniel 23.05.2012 - 12:32

Lea otras preguntas en las etiquetas