Answers:
WordPress中用于标识插件的字符串为:
plugin_basename($file);
…哪里$file
是带有插件标头的文件。
因此,如果您使用的是插件,请通过以下方式获得该插件:
$slug = plugin_basename( __FILE__ );
dirname(plugin_basename(__FILE__))
。
插件(主)文件和插件的子弹之间的区别是WordPress Codex可以做得更好的地方。我最近才感觉到您的困惑(感到沮丧)。
这是我通过对WordPress核心代码进行一些“侦探工作”而学到的。
这是WordPress识别和记录插件的独特方式。它由插件的目录和主插件文件(文件头包含各种插件详细信息,例如版本,作者等)组成。
它看起来像这样: your-plugin-directory/main-file.php
如果查看活动的插件数据(由返回get_option( 'active_plugins' )
),您会发现WordPress仅需要此插件文件即可正确识别插件。
您可以选择将其视为插件的主文件相对路径(相对于该wp-content/plugins/
目录)。您可以使用以下内容“组成”主插件文件的绝对路径:trailingslashit( WP_PLUGIN_DIR ) . $plugin_main_file
核心本身会生成插件文件,如下所示:
$plugin_main_file = plugin_basename( trim( $plugin_main_file_absolute_path ) );
有人希望插件“ slug”是该插件的某种标准化ID,例如post slug用于发布-因此,您可以使用此“ slug”将其提供给WordPress核心功能并使事情进展。
并不是的。在搜索内核中关于插件的引用(或重要的主题)并且几乎什么都没找到之后,我想我对此有所了解。
唯一真正的蛞蝓是那些东西通过一个唯一的URL访问:文章,页面,分类等,这是接受的东西(比如文章标题)的名称和生成一个URL友好的版本整点:在使用放在网址中。
我们不会在单个WordPress安装上执行此操作-WP管理员或前端中都不会执行此操作。
但是,有一个地方与WordPress代码WordPress.org网站非常纠缠。人们很难区分这两者,包括在开发人员中以某种方式普遍认为WordPress.org主题或插件插件应与帖子或页面插件相同。
它们具有相同的目的,但位于不同的网站上。在WordPress.org上,它们用于从其他主题中唯一标识一个主题,并从其余主题中唯一标识一个插件(如URL https://wordpress.org/plugins/akismet/
)。
但是,当涉及到单个 WordPress安装时,由于没有权限执行(例如在WordPress.org上),无法保证相同的唯一性。如果所有插件和主题都来自WordPress.org,则可能会起作用,但值得庆幸的是事实并非如此。
WordPress核心代码不依赖主题/插件插件来执行安装,激活,更新,删除主题或插件之类的操作。
对于主题,它依赖于主题目录,因为主题的主要入口是style.css
文件(您不能使用其他CSS文件保存主题详细信息标题)。
对于插件,它依赖于插件目录和主插件文件,因为插件可以随意调用其主文件。
核心使用主题/插件插件的唯一目的是从WordPress.org目录中处理主题和插件时:获取插件列表,检查更新,向目录使用情况数据报告等等。
总结一下关于插件的信息:每当您找到带有slug
条目的插件数据时,有99%的时间将引用插件的WordPress.org信息。
如果要以编程方式激活,更新,停用或删除WordPress安装上的某个插件,则需要使用该插件文件。您可以从插件的主文件中获得以下内容:
$plugin_file = plugin_basename( __FILE__ );
如果要从另一个插件中定位某个插件,则事情会变得有些棘手,因为您需要依靠一些“猜测”。
您可以对插件名称进行硬编码,在所有插件列表中搜索插件(请参阅get_plugins()),然后从那里获取插件文件。
如果你知道一个类或函数,由插件,您可以使用反射定义(见这个答案类和这一次的功能)。
希望这对您和其他可能很难处理“插件”的人有所帮助。它可以节省我几个小时:)
只是为了澄清自原始帖子。
我找到插件的方法是,首先导航到您的插件文件夹,然后打开与该插件关联的文件夹,最后找到包含以下代码的文件。找到该文件后,文件名减去扩展名即为您的插件。
例如,如果我在名为advanced-plugin-awesomeness.php的文件中找到以下代码,则我的头衔会是Advanced-plugin-awesomeness。
希望这可以帮助!
/*
Plugin Name: Name of plugin here
Version: 2.4.6
Description: plugin description here
Author: plugin author here
不幸的是,该子弹是通过Update API返回的,除非您查询API本身,否则此问题的答案并不那么明显。但是,如果您想查看当前插件列表和相关插件数据的列表,则只需执行以下操作:
print_r(get_site_transient('update_plugins'));
但是,这将在另外12个小时内不再提供有关新安装的插件的信息,您将不得不对它们进行其他操作,例如。使用的代码修改后的版本从wp_update_plugins
在wp-includes/update.php
...
完成此测试后,似乎可以确认,无论插件文件名,位置或大写字母如何,实际上都是由Plugin Name
生成更新包的,很可能是通过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']);
尝试这个:
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;
}