web-dev-qa-db-ja.com

プラグインスラッグを取得する方法?

インストールされている各プラグインに使用される '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;
 }

事前にご協力いただきありがとうございます。

2
Jeff Mattson

もっと良い方法があるといいな

関数で何かが失敗した場合に何らかの保護を追加するなど、コードを少し改善することができます。コードは、たとえそのように見えても、常に機能することを決して当然と考えてはなりません。コードが失敗することを常に念頭に置いてコーディングしてください。

単に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() を使用します。リンクに含まれるソースをご覧ください。

4
Pieter Goosen

プラグインアップデートサーバーで使用するためのプラグインスラッグを入手したい場合(たとえば、プラグインの画面にアップデートがあるかどうかを確認して表示する場合など)、同様の質問に対する回答をお読みください。

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;
 }
0
majick

これは私がこれを解決するために使用したものです:

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のように、.orgと同じ構造を名前に使用しないプラグイン用です。

0
Jay