私はWordPress 3.0.5を使用していて、3.1rc4でテストしました。私のプラグインのメインPHPファイルで、私がis_plugin_activeを呼び出そうとすると、Call to undefined function is_plugin_active()
が得られます。 add_actionとadd_filterを呼び出すことができます。これを修正するために何をチェック/変更する必要がありますか?
これはプラグインページの管理者の中で起こっています。私のメインプラグインファイルの一番上に、if (function_exists('is_plugin_active')) {
があり、これは常にfalseを返します。
私のメインプラグインファイルから他のプラグインの機能を見ることもできません(それが助けになる場合)。
これはis_plugin_active()が定義されているファイル - wp-admin/includes/plugin.php
- があなたのプラグインがロードされた後に管理者にロードされるだけだからです。
したがって、 'admin_init'が起動した後にのみ呼び出すことができます。
function check_some_other_plugin() {
if ( is_plugin_active('some-plugin.php') ) {
...
}
}
add_action( 'admin_init', 'check_some_other_plugin' );
テンプレートやユーザーページからis_plugin_active()を呼び出すこともできます。これは、関連するプラグインに役立ちます(つまり、新しいプラグインを操作するにはプラグイン 'xyz'が必要です)。 Codexのis_plugin_active()ドキュメントに記載されているように、plugin.phpファイルを手動でインクルードする必要があります。
これは私がアドオンオブジェクトを呼び出す前に無料のベースプラグインがアクティブであることを確認するために私のプレミアムアドオンパックで使う機能的な例です。ベースプラグインで特定のフックとフィルタが利用可能になっている必要があります。そうしないとクラッシュします。
include_once(ABSPATH.'wp-admin/includes/plugin.php');
if (!function_exists('is_plugin_active') || !is_plugin_active('store-locator-le/store-locator-le.php')) {
return;
}
余談ですが、アクティブなadminログイン内からis_plugin_active()に問題があるのであれば、admin_initが起動する前にテストしている可能性があります。 admin_menuはadmin_initよりも前に起動し、admin_menuでテストを実行すると以前に私を「噛む」ことがありました。 admin_menuがすでに実行されているので、直感的にはわかりにくい「admin_init」という名前です。 initは「最初に実行するもの」と考えています...おそらくadmin_kinda_init()の方が良いでしょう。 :)
手間のかかる回避策は、関数を手動で複製することです。
function is_plugin_active( $plugin ) {
return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}
非常に短いので、回避策として自分のコードに実装するのはそれほど難しくないはずです。
シンプルで簡単 _ wp _ から撮影
if ( ! function_exists( 'is_plugin_active' ) )
require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
そしての任意のインスタンス
if ( is_plugin_active( 'feed-them-social/feed-them.php' ) ) {
}
機能チェックを受ける。 SOこれ以上エラーはありません。
Plugin.phpをインクルードするのではなく、自分自身のis_plugin_active関数を定義する方法についてのTom Augerの回答を好んだ。しかし、同じ機能名を使用すると、管理領域がクラッシュしました。別の関数名を使用してそれを解決しました:
function is_plugin_active_byme( $plugin ) {
return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}
アクティブなプラグインをデバッグするには
var_dump(get_option(...));
特定のプラグインを確認するには
in_array(get_option(...));
このアクションは "active_plugins
" IIRCと呼ばれます。
Adminまたはフロントエンドの内部でis_plugin_active
を使用していますか? is_plugin_active
はwp-admin/includes/plugin.phpの中にある管理機能にすぎないと確信しています。
また、メインのプラグインファイルは Wordpress File Header を使用していますか?上記のplugin.phpファイルがロードされた後にあなたのプラグインは含まれていますか?
これらの解決策のどれも私のために働きませんでした、しかしこれはしました:
include_once('wp-admin/includes/plugin.php');