プラグインのスラッグを見つけるにはどうすればよいですか?


11

プラグインのスラッグを見つけるにはどうすればよいですか(slug =プラグインの更新を行い、現在アクティブなプラグインを特定するためにWordPressが使用する内部名)?通常はプラグインのフォルダー名ですが、プラグインにフォルダーがない場合は、ファイル名(hello.phpなど)です。他に例外はありますか?

  1. 小文字と大文字は関係ありますか?
  2. プラグインは、そのフォルダー名と異なるスラッグを持つことができますか?hello.phpというプラグインと別の/hello.php/hello.phpがある場合はどうなりますか?

非常に良い質問、残念我々はQさんに賞恵みをすることはできませんが、私はAが賞だと思いその;)
brasofilo

回答:


8

WordPressでプラグインを識別するために使用される文字列は次のとおりです。

plugin_basename($file);

はプラグインヘッダーを$file含むファイルです

したがって、プラグインを使用している場合は、次のコマンドでスラッグを取得します。

$slug = plugin_basename( __FILE__ );

1
plugin_basename($ file); 3.8.1以降のスラッグではありません。これは、folder / plugin_main_file.phpパスです。プラグインの「スラッグ」としてAkismetは「akismet / akismet.php」ではなく「akismet」です。
Jeff Mattson、2015

3
どちらの場合も、これは正しい答えではありません。
majick 2016

@majick true、Wordpress 4.7.4の場合、それは答えではありません
Marecky

2
プラグインスラグを生成する別の方法は、を使用することdirname(plugin_basename(__FILE__))です。
イランコ2017年

2

WP-CLIをインストールすると、コマンドラインからプラグインとそのスラグおよびバージョンのリストを取得できます。

> wp plugin list

コードでスラッグを見つける必要がある場合、それはおそらくあなたが望んでいることではないことはわかっていますが、TGM-Plugin-Activationプラグインを操作するときに役立ちました。

WP-CLIなしでWordPressを操作するのは難しいと思います。一般に、WordPressに関連する多くの一般的なタスクに非常に役立つツールです。


2

プラグイン(メイン)ファイルとプラグインのスラッグの違いは、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 ) );

プラグインのスラッグ

プラグイン「スラッグ」は、ポストスラッグがポストの場合と同様に、プラグインのある種の標準化されたIDであると予想されます。そのため、この「スラッグ」を使用して、WordPressコア関数にプラグインを提供し、物事を進めることができます。

あんまり。プラグインスラグ(または重要なテーマ)への参照をコアで検索し、ほとんど何も見つからなかった後、私はそれを理解していると思います。

唯一の本当のナメクジは(記事のタイトルのような)何かの名前を取って、そのURLに適したバージョンを生成するの全体のポイントであることを投稿、ページ、分類法など:ユニークなURLを介してアクセスできるもののためのものである使用にそれをURLに入れます。

しかし、URLでテーマ/プラグインの「スラッグ」をどこで使用するのでしょうか。

WP管理者またはフロントエンドのどちらでも、個々のWordPressインストールではこれを行いません。

しかし、WordPressのコードと非常に絡み合っている場所、WordPress.orgサイトがあります。開発者の間でWordPress.orgのテーマやプラグインのスラッグが投稿やページのスラッグと同じように機能することを考えるのが一般的であるなど、人々はこの2つを区別するのに苦労しています。

それらは同じ目的を果たしますが、別々の Webサイトにあります。WordPress.orgでは、他のテーマを一意に識別し、残りのプラグイン(などのURL https://wordpress.org/plugins/akismet/)をプラグインで識別するために使用されます。

しかし、個々の WordPressインストールに関しては、それを強制する権限がないため(WordPress.orgのように)、同じ一意性を保証できません。すべてのプラグインとテーマがWordPress.orgからのものであれば機能しますが、ありがたいことにそうではありません。

WordPressコードはテーマ/プラグインのスラッグで何をしますか?

WordPressコアコード、テーマまたはプラグインのインストール、アクティブ化、更新、削除などを行うためにテーマ/プラグインスラグ依存しません

テーマの場合、テーマへの主要なエントリポイントがstyle.cssファイルであるため、テーマディレクトリに依存します(別のCSSファイルを使用してテーマの詳細ヘッダーを保持することはできません)。

プラグインの場合、プラグインはメインファイルを自由に呼び出すことができるため、プラグインディレクトリとメインプラグインファイルに依存します。

コアがテーマ/プラグインのスラッグを使用する唯一のことは、WordPress.orgディレクトリからテーマとプラグインを処理するときです:プラグインのリストの取得、更新の確認、ディレクトリ使用状況データへのレポートなど。


プラグインスラグについてまとめる:slugエントリのあるプラグインデータを見つけると、99%の確率でプラグインのWordPress.orgスラグを参照します。

プラグインを特定するにはどうすればよいですか?

プログラムでWordPressインストールの特定のプラグインをアクティブ化、更新、非アクティブ化、または削除する場合は、プラグインファイルを使用する必要があります。プラグインのメインファイルから次のように取得できます。

$plugin_file = plugin_basename( __FILE__ );

別のプラグインから特定のプラグインターゲットにしたい場合、少しの「推測」に頼る必要があるため事態は少しトリッキーになります。

プラグイン名をハードコードし、すべてのプラグインのリストでプラグインを検索し(get_plugins()を参照)、そこからプラグインファイルを取得できます。

あなたはリフレクションを使用できるプラグインそれによって定義されたクラスや関数を知っている場合(参照このクラスのための答えと、この1の機能のために)。


これが「プラグインのナメクジ」を扱うのに苦労しているあなたや他の人たちの助けになることを願っています。数時間節約できたかもしれません:)


0

元の投稿以降、明確にするために。

プラグインのスラッグを見つける方法は、最初にプラグインフォルダーに移動してから、プラグインに関連付けられているフォルダーを開き、最後に以下のコードを格納するファイルを見つけることです。このファイルを見つけたら、拡張子を除いたファイル名がプラグインのスラッグになるはずです。

たとえば、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

-1ほとんどのファイル名やディレクトリが一致している間、更新スラグは、実際のディレクトリであるとして、これは信頼性の高い方法ではないとして- (。何のディレクトリが存在しない限り)ないファイル名
majick

またはディレクトリさえありません!私の更新された答えを見てください、それは実際にはプラグイン名から来ています。
majick 2016

0

残念ながら、スラッグはUpdate APIを介して返されます。API自体を照会しない限り、この質問に対する答えはそれほど明白ではありません。ただし、現在のプラグインスラグと関連するプラグインデータのリストを表示したい場合は、次のようにします。

print_r(get_site_transient('update_plugins'));

しかし、これは新たにインストールされたプラグインに関する情報をさらに12時間持たないため、それらに対して別の何かを行う必要があります。以下からのコードの修正版を使用wp_update_pluginswp-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']);

+1と追加の注意事項は、スラグの計算方法がまだ完全ではないことをwordpress.orgチームが明示的に示したため、時間とともに変化する可能性がある
Mark Kaplun

これが正確かどうかはわかりませんが、プラグインに対して実行しようとしましたが、失敗しました。返されたプラグイン名は「Responsive WordPress Slider-Soliloquy Lite」であり、スラッグはsoliloquy-lite
Chris

これは、プラグインがリポジトリに送信されたときにスラッグが生成され、後で名前が変更されないためと考えられます...ほとんどの場合、ディレクトリ名と一致しますが、両方に例外がある場合は、どちらかである。それは理想的ではありません:-/
majick 2016

0

次のように、plugin_basename()にDIRを渡すことで、プラグインのフォルダ名(PHP5.3 +)を取得できます。

$plugin_foldername = plugin_basename( __DIR__ );

0

これを試して:

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

1
回答編集して、このコードの機能の説明を追加してください。
ネイサンジョンソン

0

ほとんどのプラグインでは、「スラグ」はディレクトリ名と同じになります。.orgの人々はディレクトリ名を好きなように設定できます。

$slug = (dirname(plugin_basename(__FILE__)));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.