从unctions.php加载插件的js文件

时间:2020-01-09 作者:StevieD

我试图改变插件注册器自己的js文件的方式,如下所示:

function gpvd_enqueue_styles_admin() {
    wp_enqueue_style(
        \'gpvb-admin-styles\',
        plugin_dir_url( __FILE__ ) . \'css/admin.css\',
        array(),
        \'\',
        \'all\'
    );
    wp_register_script(
        \'gpvb-admin-scripts\',
        plugins_url( \'js/block.js\', __FILE__ ),
        array( \'wp-blocks\', \'wp-components\', \'wp-element\', \'wp-i18n\', \'wp-editor\' ),
        filemtime( plugin_dir_path( __FILE__ ) . \'js/block.js\' ),
        false
    );
    wp_enqueue_script( \'gpvb-admin-scripts\' );
}
并更改false 到atrue.

所以我把这个放在我的functions.php 文件:

function sh_child_enqueue_styles_admin() {
    wp_enqueue_style(
        \'gpvb-admin-styles\',
        plugin_dir_url( __FILE__ ) . \'css/admin.css\',
        array(),
        \'\',
        \'all\'
    );
    wp_register_script(
        \'gpvb-admin-scripts\',
        plugins_url( \'js/block.js\', __FILE__ ),
        array( \'wp-blocks\', \'wp-components\', \'wp-element\', \'wp-i18n\', \'wp-editor\' ),
        filemtime( plugin_dir_path( __FILE__ ) . \'js/block.js\' ),
        true
    );
    wp_enqueue_script( \'gpvb-admin-scripts\' );
}

remove_action(\'admin_enqueue_scripts\', \'gpvb_enqueue_styles_admin\');
add_action(\'admin_enqueue_scripts\', \'sh_child_enqueue_styles_admin\');
但是,它找不到插件的js文件,因为__FILE__. 我是否必须在其中硬编码路径,或者是否有更好的方法来实现这一点?

1 个回复
最合适的回答,由SO网友:Rup 整理而成

它感觉有点脆弱,但你可以这样做:

wp_scripts()->add_data( \'gpvb-admin-scripts\', \'group\', 1 );
在低优先级admin\\u enqueue\\u脚本挂钩中,因为wp_register_script does with the $is_footer flag. 然而,未来版本的WordPress可能会改变其内部保存方式(尽管它已经稳定了5年多)。

或者,您可以查询现有条目并使用the dependency properties 要再次使用wp\\u register\\u脚本覆盖现有依赖项,请执行以下操作:

$existing_script = wp_scripts()->query( \'gpvb-admin-scripts\' );
if ( $existing_script ) {
    // Overwrite existing registration
    wp_deregister_script( $existing_script->handle ); 
    wp_register_script( $existing_script->handle,
                        $existing_script->src,
                        $existing_script->deps,
                        $existing_script->ver,
                        true );
}
低优先级admin\\u enqueue\\u脚本挂钩中也是如此。