私はどうやってプラグインのスラッグを見つけることができるのでしょうか(slug = WordPressがプラグインの更新を行い、どのプラグインが現在アクティブになっているかを判断するために使用する内部名)通常はプラグインのフォルダ名ですが、プラグインがフォルダを持っていない場合はファイル名です(hello.phpのように)。他に例外はありますか?
プラグインを識別するためにWordPressで使用される文字列は次のとおりです。
plugin_basename($file);
…$file
はプラグインヘッダを持つ ファイルです 。
それであなたがあなたのプラグインにいるならば、スラグを入手してください:
$slug = plugin_basename( __FILE__ );
WP-CLI をインストールすると、プラグインの一覧とスラッグとバージョンをコマンドラインから取得できます。
> wp plugin list
コード内のスラッグを見つける必要があるのであれば、それはおそらくあなたが望むものではないことを私は知っていますが、TGM-Plugin-Activationプラグインを使って作業している間私を助けてくれました。
WP-CLIなしでWordPressを操作するのは難しいと思います。一般的に、WordPressに関連する多くの一般的なタスクにとって非常に便利なツールです。
プラグイン(メイン)ファイルとプラグインのスラッグの違いは、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コア機能と物事を進めます。
あんまり。プラグインのスラッグ(または重要なテーマ)への参照をコアで検索し、ほとんど何も見つからなかった後、私はそれを把握していると思います。
唯一のreal slugsは、一意のURLを介してアクセス可能なもの(投稿、ページ、分類など)のものです。これが、何かの名前(投稿タイトルなど)を取得してURLを生成する全体のポイントですそのフレンドリーなバージョン:URLで使用するため。
個々のWordPressインストールでは行いません-WP管理者でもフロントエンドでも行いません。
ただし、WordPressコードに非常に絡み合っている場所があります。WordPress.orgサイト。この2つを区別するのに苦労しています。開発者の間でWordPress.orgのテーマまたはプラグインのスラッグを考慮することは、投稿またはページのスラッグと同じように機能するはずです。
これらは同じ目的を果たしますが、separateのWebサイトです。 WordPress.orgでは、他からテーマを一意に識別するために使用され、残りのプラグインを(https://wordpress.org/plugins/akismet/
などのURLで)一意に識別します。
しかしindividual WordPressのインストールに関しては、それを実施する権限がないため(WordPress.orgのように)同じ一意性は保証できません。 all WordPress.orgからプラグインとテーマが提供されていれば機能しますが、ありがたいことにそうではありません。
WordPressコアコードは、テーマのインストール、アクティブ化、更新、削除などを行うためにテーマ/プラグインのスラグに依存しません。プラグイン。
テーマの場合、テーマへのメインエントリポイントはstyle.css
ファイルであるため(themeディレクトリに依存します(別のものは使用できません)テーマの詳細ヘッダーを保持するCSSファイル)。
プラグインの場合、pluginディレクトリとメインプラグインファイルに依存します。プラグインはメインファイルを好きなように呼び出すことができるためです。
コアがテーマ/プラグインのスラッグを使用する唯一のことは、WordPress.orgディレクトリからのテーマとプラグインを処理する場合です:プラグインのリストを取得し、更新、ディレクトリ使用状況データへの報告など。
plugin slugs:についてまとめると、slug
エントリを持つプラグインデータが見つかるたびに、99%の時間はWordPress.orgプラグインのスラッグを参照します。
WordPressインストールで特定のプラグインをプログラムでアクティブ化、更新、非アクティブ化、または削除する場合は、プラグインファイルを使用する必要があります。次のようにして取得できますプラグインのメインファイル:
$plugin_file = plugin_basename( __FILE__ );
別のプラグインの特定のプラグインをターゲットにするちょっとした「推測」に頼る必要があるので、少し面倒になります。
プラグイン名をハードコーディングし、すべてのプラグインのリストでプラグインを検索し( get_plugins() を参照)、そこからプラグインファイルを取得できます。
そのプラグインによって定義されているクラスまたは関数を知っている場合、リフレクションを使用できます(クラスについては this answer、関数については this one を参照)。
これが、あなたや、「プラグインのスラッグ」を扱うのに苦労するかもしれない他の人たちに役立つことを願っています。それは私を数時間救ったかもしれない:)
元の投稿から明確にするためだけに。
私がプラグインスラッグを見つけた方法は、まずあなたのプラグインフォルダにナビゲートしてからプラグインに関連するフォルダを開き、そして最後に以下のコードを格納するファイルを見つけることです。このファイルを見つけたら、ファイル名から拡張子を引いたものがプラグインスラッグになります。
例えば、私が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
残念ながら、更新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']);
プラグインのフォルダ名(PHP5.3以降)を取得するには、 _ dir _ をplugin_basename()に渡します。
$plugin_foldername = plugin_basename( __DIR__ );
これを試して:
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;
}