我想知道如何才能找到插件的slug(slug=WordPress用来更新插件和确定哪些插件当前处于活动状态的内部名称)?它通常是插件的文件夹名,但如果插件没有文件夹,则是其文件名(如hello.php)。是否有其他例外情况?
大小写字符重要吗
我想知道如何才能找到插件的slug(slug=WordPress用来更新插件和确定哪些插件当前处于活动状态的内部名称)?它通常是插件的文件夹名,但如果插件没有文件夹,则是其文件名(如hello.php)。是否有其他例外情况?
大小写字符重要吗
WordPress中用于标识插件的字符串为:
plugin_basename($file);
…在哪里$file
是一个file with the plugin headers.因此,如果您在插件中,请使用以下工具获取slug:
$slug = plugin_basename( __FILE__ );
插件(主)文件和插件的slug之间的区别在于WordPress Codex可以做得更好。我理解你的困惑,就像我最近感觉到的那样(夹杂着沮丧)。
这是我通过对WordPress核心代码进行一些“侦探工作”所学到的。
它看起来像这样:your-plugin-directory/main-file.php
如果查看活动插件数据(由返回get_option( \'active_plugins\' )
), 您将看到WordPress只需要这个插件文件来正确识别插件。
您可以选择将其视为插件的主文件相对路径(相对于wp-content/plugins/
目录)。您可以使用以下内容“合成”主插件文件的绝对路径:trailingslashit( WP_PLUGIN_DIR ) . $plugin_main_file
core本身生成如下插件文件:
$plugin_main_file = plugin_basename( trim( $plugin_main_file_absolute_path ) );
不是真的。在核心搜索了插件段塞(或重要主题)的引用后,几乎什么也没找到,我想我已经掌握了它。
唯一真正的鼻涕虫是那些可以通过唯一URL访问的东西:帖子、页面、分类法等。这就是取某个东西的名称(如帖子标题)并生成URL友好版本的关键所在:to use it in a URL.
然而,有一个地方与WordPress代码纠缠在一起,那就是WordPress。组织网站
它们的作用相同,但在不同的网站上。在WordPress上。org它们用于从其他主题中唯一地识别一个主题,并从其他主题中唯一地识别一个插件(在URL中,如https://wordpress.org/plugins/akismet/
).
但是,当涉及到WordPress的个别安装时,无法保证相同的唯一性,因为没有强制执行的权限(如在WordPress.org上)。如果所有的插件和主题都来自WordPress,它就可以工作。org,但谢天谢地,事实并非如此。
对于主题,它依赖于theme directory 因为主题的主要切入点是style.css
文件(您不能使用其他CSS文件来保存主题详细信息标题)。
对于插件,它依赖于plugin directory AND the main plugin file, 因为插件可以随意调用主文件。
核心使用主题/插件slug的唯一目的是when it handles themes and plugins from the WordPress.org directory: 获取插件列表、检查更新、报告目录使用情况数据等等。
总结一下插件段塞:每当您使用slug
条目,99%的时间它将引用WordPress。插件的org slug
$plugin_file = plugin_basename( __FILE__ );
您可以硬编码插件名称,在所有插件列表中搜索插件(请参阅get_plugins()) 然后从那里获取插件文件。
如果您知道该插件定义的类或函数,则可以使用反射(请参阅this 课程答案和this one 对于函数)。
我希望这能帮助你和其他可能很难处理“插件段塞”的人。这本可以帮我节省几个小时:)
如果您安装WP-CLI 然后,您可以从命令行获取插件列表及其slug和版本:
> wp plugin list
我发现没有WP-CLI很难使用WordPress,一般来说,对于许多与WordPress相关的常见任务来说,它是一个非常有用的工具。
不幸的是,slug是通过更新API返回的,除非您查询API本身,否则这个问题的答案并不明显。但是,如果您想查看当前插件段塞和相关插件数据的列表,只需执行以下操作:
print_r(get_site_transient(\'update_plugins\'));
但是,在接下来的12个小时内,这将不会有关于新安装插件的信息,您必须对这些插件执行不同的操作,例如使用wp_update_plugins
在里面wp-includes/update.php
... 这样做是为了测试它,它似乎证实了,无论插件文件名、位置或大写,它实际上是Plugin Name
生成更新slug,很可能是通过sanitize_title
. 因此,我认为正确的答案应该是:
// if you have the plugin basename:
// $pluginfile = WP_PLUGIN_DIR.\'/\'.$pluginbasename;
// otherwise if you have the absolute path already:
$plugin = get_plugin_data($pluginfile);
$pluginslug = sanitize_title($plugin[\'Name\']);
对于大多数插件,“slug”将与目录名相同。虽然。组织人员可以将目录名设置为他们想要的任何内容。
$slug = (dirname(plugin_basename(__FILE__)));
只是想澄清一下原来的帖子。
我找到插件slug的方法是首先导航到插件文件夹,然后打开与插件关联的文件夹,最后找到包含以下代码的文件。一旦你找到这个文件,文件名减去扩展名应该是你的插件slug。
例如,如果我在名为advanced plugin awesomeness的文件中找到以下代码。php我的slug将是高级插件。
希望这有帮助!
/*
Plugin Name: Name of plugin here
Version: 2.4.6
Description: plugin description here
Author: plugin author here
您可以通过传递DIR 要插入plugin\\u basename(),请执行以下操作:
$plugin_foldername = plugin_basename( __DIR__ );
Try this:
function get_slugname(){
$tmp = array();
$plugins_all = get_plugins() ;
$plugin_slug = explode(\'/\',dirname(plugin_basename(__FILE__)));
foreach ($plugins_all as $key=>$value) {
if ($plugin_slug[0] == explode(\'/\',$key)[0] ) {
$tmp = $value;
$tmp[\'slug\'] = explode(\'/\',$key)[0];
$tmp[\'file\'] = explode(\'/\',$key)[1];
}
}
return $tmp;
}
在我的WordPress小部件中,我使用以下代码:wp_register_script(\'jquery-ui.widget\', plugins_url(\'assets/js/jquery-ui-1.9.2.widget.js\', dirname( __FILE__ ))); 不幸的是,代码给了我一个无效的URL,它与我的系统路径混合在一起:http://test.dev/wp-content/plugins/C:/projects/wordpress/plugins/assets/js/