URLs of plugin resources?

时间:2011-01-25 作者:Odyss3us

我正在尝试将插件的脚本和css文件添加到管理标头中。

是否有类似的功能get_bloginfo(\'url\') 我可以使用它来正确引用文件,而不必硬编码url?

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

我正在尝试将插件的脚本和css文件添加到管理标头中。

那么像任何优秀的开发人员一样,您应该使用wp_enqueue_scriptwp_enqueue_style 因此,您无需将这些脚本/样式包含硬编码到插件中(这意味着用户可以在需要时将其解开)。

http://codex.wordpress.org/Function_Reference/wp_enqueue_script
http://codex.wordpress.org/Function_Reference/wp_enqueue_style

如果样式/脚本只加载到插件页面中,那么理想情况下,您应该在通用管理头挂钩内使用一些条件逻辑,或者将一些队列专门挂钩到页面。

首先为您的一个或多个页面设置钩子,这是调用中使用的第四个参数add_menu_page 第五个在add_submenu_page, 我们来举个例子(直接从this codex page) 想象一下这些代表了你的插件页面。

add_menu_page(\'Page title\', \'Top-level menu title\', \'manage_options\', \'my-top-level-handle\', \'my_magic_function\');
add_submenu_page( \'my-top-level-handle\', \'Page title\', \'Sub-menu title\', \'manage_options\', \'my-submenu-handle\', \'my_magic_function\');
在这种情况下,两个挂钩(或把手)是my-top-level-handlemy-submenu-handle 分别地

现在,为了将脚本或样式专门挂接到插件页面的管理头部,我们可以采用几种不同的方法,但我将介绍两种最明显(也是我最喜欢的)方法。

方法1使用admin_print_scripts-$hookadmin_print_styles-$hook 特定于您的插件,并将每个插件页面的CSS/JS排队。

$hook表示给定管理页的挂钩(或句柄),每个管理页都有一个挂钩。

脚本将父菜单和子菜单页面的JS文件排队

add_action( \'admin_print_scripts-my-top-level-handle\', \'enqueue_my_js\' );
add_action( \'admin_print_scripts-my-submenu-handle\', \'enqueue_my_js\' );
function enqueue_my_js() {
    wp_enqueue_script( .. YOUR ENQUEUE ARGS HERE .. );
}
将父菜单页和子菜单页的样式表文件排队

add_action( \'admin_print_styles-my-top-level-handle\', \'enqueue_my_style\' );
add_action( \'admin_print_styles-my-submenu-handle\', \'enqueue_my_style\' );
function enqueue_my_style() {
    wp_enqueue_style( .. YOUR ENQUEUE ARGS HERE .. );
}

方法#2

通过钩住更通用的管理头钩子,将脚本和样式在所有插件管理页面中排队。

管理打印脚本+管理打印样式

通过这种方法,我们将使用对每个管理页面运行的更通用的钩子,但通过一点条件逻辑,我们可以确定我们正在查看的页面类型,如果它不是插件的页面之一,我们可以返回它(因此它本质上具有与第一种方法相同的效果)。

脚本将JS排入任何插件页面的队列

add_action( \'admin_print_scripts\', \'enqueue_my_js\' );
function enqueue_my_js() {
    global $parent_file;
    if( \'my-top-level-handle\' != $parent_file )
        return;
    wp_enqueue_script( .. YOUR ENQUEUE ARGS HERE .. );
}
任何插件页面的CSS排队

add_action( \'admin_print_styles\', \'enqueue_my_style\' );
function enqueue_my_style() {
    global $parent_file;
    if( \'my-top-level-handle\' != $parent_file )
        return;
    wp_enqueue_style( .. YOUR ENQUEUE ARGS HERE .. );
}
$parent_file 将只匹配插件的页面,因此return; 当它不匹配时,即停止在函数内执行代码,以便排队仅在$parent_file 匹配句柄。

如果您打算将脚本或样式排入多个页面的队列,可以通过注册脚本来简化此过程。

http://codex.wordpress.org/Function_Reference/wp_register_script
http://codex.wordpress.org/Function_Reference/wp_register_style

注册脚本或样式的优点是,调用该文件就变成了一个简单的。。

wp_enqueue_script( \'my_script_handle\' );
。。同样适用于等效样式。

这避免了为每个排队呼叫提供路径、依赖性等任何需要。

由于时间关系,我不得不在最后总结出答案,但希望我已经提供了足够有价值的信息。如果你在试图理解某些东西时遇到了困难,只需发表评论即可……)

SO网友:Jan Fabry

如果您希望url指向插件目录中的文件,则应使用plugins_url(), 像这样:

// The url to the `wordpress.png` file in the `images` subdirectory of the plugin
plugins_url( \'/images/wordpress.png\', __FILE__ );
记住,人们可以rename your plugin directory, 所以不要在你的文件中硬编码。

SO网友:Bainternet

您可以使用WP\\u PLUGIN\\u URL,如下所示:

WP_PLUGIN_URL .\'/plugin_directory/filename.css\'
或者你可以这样定义自己:

define( \'PLUGIN_DIR\', dirname(__FILE__).\'/\' );  
在主插件文件上。

希望这有帮助。

SO网友:Pippin

我通常使用以下方法:

$baseFileDir = WP_PLUGIN_URL.\'/\'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__));
然后,要引用主插件目录中名为“resources”的文件夹中的文件,请执行以下操作:

echo $baseFileDir . \'resources/file.php\';

结束

相关推荐

如何更改wp-admin后端的措辞?

我不想为了改变用户输入新帖子的页面而编辑核心文件,所以有没有一种方法可以在一个主题中,或者在函数中这样做。php。。?具体来说,我正在尝试将“设置特色图像”文本的措辞更改为类似“设置特色图像-50像素乘以50像素”