1

我想在我的插件被激活时注册一个脚本。所以我放置了:

register_activation_hook(__FILE__, 'register_script');

function register_script(){
   wp_register_script('addjs','http://example.com/exmple.js');
}

接下来,我创建了一个元框并将脚本放入add_meta_boxes钩子中:

wp_enqueue_script('addjs');

为什么这不起作用?我的 JS 文件只是一个简单的alert函数。init但是,为什么当我使用钩子或其他钩子注册我的脚本时,我的代码可以工作?

4

1 回答 1

1

注册脚本实际上并不使脚本入队。这就是需要优化的地方。

register_activation_hook只运行一次,在那里注册你的脚本不会在后续的 WordPress 加载中保持注册。动作钩子都不init是这样做的地方。它是wp_enqueue_scripts(前端)或admin_print_scripts(后端),尽管它们的名称用于将样式和脚本排入队列。

在特定位置加载脚本是一种很好的做法。一旦我的管理区域崩溃,因为一个主题到处加载它的脚本/样式,而不仅仅是在前端。最好的蹩脚代码

主要区别在于,如果您注册一个脚本,您只需要wp_enqueue_script($handle)在代码的其他地方调用。但如果不是这样,你可以把寄存器部分丢掉,直接入队。

一个小技巧是你的回调中添加你的wp_enqueue_scriptand ,它只会与 Meta Box 一起加载。短代码的工作原理相同。wp_enqueue_style add_meta_box()

另外的选择,

add_action( 'admin_menu', function() 
{
    $page = add_submenu_page( $args );
    add_action( "admin_print_scripts-$page", 'your_callback' );
});

或者,

add_action( 'wp_enqueue_scripts', function() {
    if( is_single() )
        wp_enqueue_style( $args );
});

参考:
-条件 wp-enqueue-script-on-a-page
- when-to-use-add-actioninit-vs-add-actionwp-enqueue-scripts
- register-and-enqueue-conditional-browser-specific-javascript -files
-如何加载脚本和css-for-admins-only-when-editing-or-adding-posts

于 2013-09-09T23:04:17.677 回答