如何在管理员端包含使用jQuery的JavaScript

时间:2012-05-23 作者:Shimon S

我试试这个:

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>\';
 }
但通过这种方式,它无法识别jQuery。所以我得到Uncaught ReferenceError: jQuery is not defined.<我认为这是因为jQuery是在我的脚本之后链接的。正如我在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>
我怎样才能修复它?

2 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

问题是,您正在加载jQuery之前加载脚本。

Do not print scripts directly.

您应该(注册然后)使用提供的API将它们排队。jQuery已经是一个注册的脚本,所以您可以将其排队(比如admin_enqueue_scripts 挂钩)。

但是,只有在加载需要jQuery的自定义脚本时,才需要加载jQuery,在这种情况下,应该将自定义脚本排队,并将jQuery作为依赖项添加。WordPress将按照正确的顺序处理脚本的加载:

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
     );
}
旁白使用get_template_directory_uri() 而不是get_bloginfo()$hook (这将是edit.php, post.php, post-new.php 等)和get_current_screen() 确定您所在的页面是否需要加载脚本。仅在实际需要时加载脚本例如(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\' );

SO网友:Daniel

首先,让我们以适当的方式包含它们。

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

}
第二,在这里阅读http://wpcandy.com/teaches/how-to-load-scripts-in-wordpress-themes

结束

相关推荐

如何告诉WordPress页面上存在jQuery,以避免通过wp_enQueue_脚本重复

为了减少http请求,我将我的主题使用的所有脚本合并到一个简化的脚本中。每次保存主题选项时的js文件。此中的一个文件。js是jQuery库。我没有将jQuery作为一个单独的文件(使用wp\\u enqueue\\u脚本)包含,而是将wordpress核心jQuery文件作为此主机输出流的一部分。js文件问题是,由于我没有使用wp\\u enqueue\\u scripts()加载jQuery,因此有可能通过一个不知道它已经存在的插件在页面上包含多次。我可以设置一个标志以便WordPress知道页面上已经