How can I find plugins' slug?

时间:2013-10-24 作者:Paul

我想知道如何才能找到插件的slug(slug=WordPress用来更新插件和确定哪些插件当前处于活动状态的内部名称)?它通常是插件的文件夹名,但如果插件没有文件夹,则是其文件名(如hello.php)。是否有其他例外情况?

大小写字符重要吗

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

WordPress中用于标识插件的字符串为:

plugin_basename($file);
…在哪里$file 是一个file with the plugin headers.

因此,如果您在插件中,请使用以下工具获取slug:

$slug = plugin_basename( __FILE__ );

SO网友:Vlad Olaru

插件(主)文件和插件的slug之间的区别在于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

core本身生成如下插件文件:

$plugin_main_file = plugin_basename( trim( $plugin_main_file_absolute_path ) );

插件slug

有人会认为插件“slug”是插件的某种标准化ID,就像post slug是用于post一样,因此您可以使用这个“slug”将其提供给WordPress核心功能并使其正常运行。

不是真的。在核心搜索了插件段塞(或重要主题)的引用后,几乎什么也没找到,我想我已经掌握了它。

唯一真正的鼻涕虫是那些可以通过唯一URL访问的东西:帖子、页面、分类法等。这就是取某个东西的名称(如帖子标题)并生成URL友好版本的关键所在:to use it in a URL.

但在URL中,我们在哪里使用主题/插件“slug”

我们不会在单独的WordPress安装上这样做-无论是在WP admin还是前端。

然而,有一个地方与WordPress代码纠缠在一起,那就是WordPress。组织网站

它们的作用相同,但在不同的网站上。在WordPress上。org它们用于从其他主题中唯一地识别一个主题,并从其他主题中唯一地识别一个插件(在URL中,如https://wordpress.org/plugins/akismet/).

但是,当涉及到WordPress的个别安装时,无法保证相同的唯一性,因为没有强制执行的权限(如在WordPress.org上)。如果所有的插件和主题都来自WordPress,它就可以工作。org,但谢天谢地,事实并非如此。

WordPress代码对主题/插件段塞有什么作用

WordPress核心代码doesn\'t rely on theme/plugin slugs 执行诸如安装、激活、更新、删除主题或插件之类的操作。

对于主题,它依赖于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

我们如何识别插件

如果你想在WordPress安装中以编程方式激活、更新、停用或删除某个插件,你需要使用the plugin file. 您可以从插件的主文件中获得如下内容:

$plugin_file = plugin_basename( __FILE__ );

如果你想从另一个插件中找到某个插件,事情会变得有点棘手,因为你需要依靠一些“猜测”。

您可以硬编码插件名称,在所有插件列表中搜索插件(请参阅get_plugins()) 然后从那里获取插件文件。

如果您知道该插件定义的类或函数,则可以使用反射(请参阅this 课程答案和this one 对于函数)。

我希望这能帮助你和其他可能很难处理“插件段塞”的人。这本可以帮我节省几个小时:)

SO网友:Thomas Bindzus

如果您安装WP-CLI 然后,您可以从命令行获取插件列表及其slug和版本:

> wp plugin list

我知道如果你需要在代码中找到slug,这可能不是你想要的,但它在使用TGM插件激活插件时帮助了我。

我发现没有WP-CLI很难使用WordPress,一般来说,对于许多与WordPress相关的常见任务来说,它是一个非常有用的工具。

SO网友:majick

不幸的是,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\']);

SO网友:John Dee

对于大多数插件,“slug”将与目录名相同。虽然。组织人员可以将目录名设置为他们想要的任何内容。

$slug = (dirname(plugin_basename(__FILE__)));

SO网友:Meatloaf4

只是想澄清一下原来的帖子。

我找到插件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

SO网友:jb510

您可以通过传递DIR 要插入plugin\\u basename(),请执行以下操作:

$plugin_foldername = plugin_basename( __DIR__ );

SO网友:busy

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;
}
结束

相关推荐

Plugins_url函数混合了系统路径和URL

在我的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/