it-swarm.com.de

Wie kann ich JavaScript einbinden, das auf der Admin-Seite jQuery verwendet?

Ich versuche das:

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

aber auf diese Weise erkennt es jQuery nicht. Also bekomme ich Uncaught ReferenceError: jQuery is not defined.
Ich denke, das liegt daran, dass jQuery nach meinem Skript verlinkt ist. Wie ich in der HTML-Quelle sehe:

<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>

Wie kann ich es reparieren?

2
s976

Das Problem ist, dass Sie Ihr Skript laden, bevor jQuery geladen wurde.

Skripte nicht direkt drucken .

Sie sollten sie mithilfe der bereitgestellten API (registrieren und anschließend) in die Warteschlange stellen. jQuery ist bereits ein registriertes Skript, daher können Sie es einfach in die Warteschlange stellen (sagen wir am Hook admin_enqueue_scripts).

Sie müssen jQuery jedoch nur laden, wenn Sie ein benutzerdefiniertes Skript laden, für das dies erforderlich ist. In diesem Fall sollten Sie Ihr benutzerdefiniertes Skript in die Warteschlange stellen und jQuery als Abhängigkeit hinzufügen. WordPress übernimmt dann das Laden der Skripte in der richtigen Reihenfolge:

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

Nebenbemerkungen

  • Verwende get_template_directory_uri() anstatt get_bloginfo()
  • Verwenden Sie den übergebenen $hook (der edit.php, post.php, post-new.php usw. sein wird) und get_current_screen() , um festzustellen, ob Sie sich auf einer Seite befinden, auf der Ihr Skript geladen werden muss. Laden Sie Skripte nur, wenn Sie sie tatsächlich benötigen.

Zum Beispiel (Codex-Beispiel):

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' );
7
Stephen Harris

Lassen Sie sie uns zuerst richtig einbinden.

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

}

Zweitens lesen Sie hier http://wpcandy.com/teaches/how-to-load-scripts-in-wordpress-themes

0
Daniel