How to get Plugin Slugs?

时间:2015-10-11 作者:Jeff Mattson

我正在尝试为每个安装的插件使用“slug”。我还没有找到解决这个问题的好办法。我创建了这个函数来获取所有的slug并将它们返回到一个数组中。我希望有更好的方法。这对所有插件都有效吗?

 function l7wau_get_slugs(){
        $plugin_array = get_plugins();
        $url_array = array_keys( $plugin_array );
        foreach ( $url_array as $plugin_url ){
            $temp_array = explode( \'/\', $plugin_url );
            $slugs[] = str_replace( \'.php\', \'\', end( $temp_array ) );
        }
        return $slugs;
 }
提前感谢您的帮助。

3 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

我希望有更好的方法

您可以更好地编写代码,比如在函数出现故障时添加一些保护。任何人都不应该想当然地认为代码总是可以工作的,即使看起来是这样。始终以您的代码的心态进行编码will 失败

我只想做一个foreach 循环,然后将钥匙穿过basename 将在最后一次之后返回所有内容/ 如果存在,并将删除.php 扩大

至于get_plugins(), 这绝对是一个很好的选择,因为它利用内置缓存系统来缓存其结果

我可能会将您的代码重写如下;(需要PHP 5.4+

function l7wau_get_slugs()
{
    $plugin_array = get_plugins();

    // First check if we have plugins, else return false
    if ( empty( $plugin_array ) )
        return false;

    // Define our variable as an empty array to avoid bugs if $plugin_array is empty
    $slugs = [];

    foreach ( $plugin_array as $plugin_slug=>$values ){
        $slugs[] = basename(
                $plugin_slug, // Get the key which holds the folder/file name
                \'.php\' // Strip away the .php part
            );
    }
    return $slugs;
}
这对所有插件都有效吗?

是的,它将适用于插件目录中的插件。get_plugins() 使用get_plugin_data() 它解析插件头数据以检索元数据。只需查看链接中包含的来源。

SO网友:majick

注意:如果您希望获得插件slug以用于插件更新服务器(例如,用于检查和显示您的插件是否在插件屏幕上有更新),您应该阅读以下类似问题的答案:

https://wordpress.stackexchange.com/a/216940/76440

因此,在这种情况下,这将起作用:

 function get_plugin_update_slugs(){
    $plugin_array = get_plugins();
    if (empty($plugin_array)) {return array();}
    foreach ( $plugin_array as $pluginfile => $plugindata) {
        $slugs[] = sanitize_title($plugindata[\'Name\']);
    }
    return $slugs;
 }

SO网友:Jay

以下是我用来解决这个问题的方法:

function apc_get_plugin_slugs() {
    $all_plugins =  get_plugins() ;
    if ( empty( $all_plugins ) ) { return []; } 

    foreach ($all_plugins as $pluginFile => $pluginData ) {
        // Strip filename and slashes so we can get the slug
        if ( false !== strpos( $pluginFile, \'/\' ) )  {
            $slugs[] = substr( $pluginFile, 0, strpos( $pluginFile, \'/\'));
        }
        // If its just a php file then lets use the pluginData Name and sanitize it
        else {
            $slugs[] = sanitize_title( $pluginData[ \'Name\' ] );
        }
    }
    return $slugs;
}
获取插件文件夹名称,以便我们可以查询。org-api,如果它只是一个php文件,那么我们可以得到pluginData名称(hello.php 变成hello dolly)。该函数的第一部分用于插件,这些插件的名称结构与插件上的名称结构不同。像Akismet这样的组织,/akismet/akismet.phpakismet-anti-spam.

相关推荐

如何将Page-{slug}.php这样的页面模板文件移到子目录中?

我想移动页面模板文件,如page-{slug}.php 到我的主题中的子目录,WordPress将自动识别它们。如果所述表单的页面模板在子目录中不存在,那么WordPress应该回到默认的模板加载规则。我如何才能做到这一点?Note-1: This 对于页面模板和this 链接提及template-parts/page, 这不是一回事。Note-2: 我有多个page-{slug}.php 像页面模板文件一样,我想将它们移动到子目录中,以获得更整洁的文件组织。