MENU

管理画面で特定のプラグインが有効時のみスクリプトを読み込む

WordPressの管理画面で、特定のプラグインが有効になっている場合のみ、スクリプトを読み込む方法を解説します。これにより、不要なスクリプトの読み込みを防ぎ、管理画面の動作を軽くすることができます。

例えば、「Contact Form 7」や「WooCommerce」などのプラグインが有効時のみスクリプトを適用する場合に役立ちます。

目次

解説

管理画面で特定のプラグインが有効かどうかを判定し、その場合にのみスクリプトを読み込む方法です。is_plugin_active() 関数を使用すると、特定のプラグインが有効かどうかを簡単にチェックできます。

以下のコードは、Contact Form 7 が有効になっているかを判定し、メッセージを出力する例です。

function custom_admin_enqueue_scripts() {
    // 特定のプラグイン (例: Contact Form 7) が有効かチェック
    if ( is_plugin_active('contact-form-7/wp-contact-form-7.php') ) {
        wp_enqueue_script(
            'custom-admin-script',
            get_template_directory_uri() . '/js/custom-admin.js',
            array('jquery'),
            false,
            true
        );
    }
}
add_action('admin_enqueue_scripts', 'custom_admin_enqueue_scripts');

// プラグインが有効かどうかを判定する関数を利用するためにファイルを読み込む
if ( ! function_exists('is_plugin_active') ) {
    require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
  1. is_plugin_active('contact-form-7/wp-contact-form-7.php') を使い、「Contact Form 7」が有効かどうかをチェック。
  2. 有効な場合のみ wp_enqueue_script() を使用してスクリプト (custom-admin.js) を管理画面に追加。
  3. is_plugin_active() を使用するために、wp-admin/includes/plugin.php を読み込む(このファイルが未読み込みの場合に備える)。
function my_plugin_admin_scripts($hook) {
    if (!is_plugin_active('contact-form-7/wp-contact-form-7.php')) {
        return;
    }
    
    if ($hook == 'edit.php') {
        wp_enqueue_script('cf7-admin-script', plugin_dir_url(__FILE__) . 'cf7-admin.js', array(), '1.0', true);
    }
}
add_action('admin_enqueue_scripts', 'my_plugin_admin_scripts');
  1. is_plugin_active() を使用し、プラグインが有効かどうかを判定。
  2. プラグインが無効なら return; してスクリプトを読み込まない。
  3. edit.php(投稿一覧ページ)のみ cf7-admin.js を読み込む。
  • is_plugin_active() を使用する場合、include_once( ABSPATH . 'wp-admin/includes/plugin.php' ); を追加する必要がある。
  • contact-form-7/wp-contact-form-7.php のパスは、プラグインディレクトリの plugin_basename() で確認できる。

難易度(★★★☆☆ – 中級者向け)

  • 基本的なPHP の知識が必要。
  • WordPressのフック(admin_enqueue_scripts を理解している必要がある。
  • プラグインのパス を把握していないと正しく判定できないため、事前に確認が必要。
  • is_plugin_active() の仕様を理解していないとエラーが発生する可能性がある。

ポイント

  • 特定のプラグインが有効な場合のみスクリプトを読み込むことで、不要なスクリプトのロードを回避
  • is_plugin_active() を使う場合、wp-admin/includes/plugin.php を読み込む必要があることに注意
  • プラグインのパスを確認する(正しいパスでないと動作しない)

Q&A

is_plugin_active() を使ってもプラグインが認識されないのはなぜ?

is_plugin_active() を使用するには、wp-admin/includes/plugin.php を事前に読み込む必要があります。コードに require_once ABSPATH . 'wp-admin/includes/plugin.php'; を追加してください。

特定の管理画面ページだけでスクリプトを適用するには?

get_current_screen() を利用し、スクリプトを適用するページを制限できます。

function custom_admin_enqueue_scripts() {
    if ( is_plugin_active('contact-form-7/wp-contact-form-7.php') ) {
        $screen = get_current_screen();
        if ( $screen->id === 'edit-post' ) { // 投稿一覧ページのみ
            wp_enqueue_script(
                'custom-admin-script',
                get_template_directory_uri() . '/js/custom-admin.js',
                array('jquery'),
                false,
                true
            );
        }
    }
}
add_action('admin_enqueue_scripts', 'custom_admin_enqueue_scripts');

is_plugin_active() ではなく class_exists() を使う方法はある?

プラグインによっては、特定のクラスが読み込まれているかどうかで判定できます。例えば、WooCommerce が有効かどうかをチェックする場合は以下のように書けます。

if ( class_exists('WooCommerce') ) {
    // WooCommerce が有効な場合の処理
}

まとめ

  • is_plugin_active() を使うと、特定のプラグインが有効な場合のみスクリプトを読み込める。
  • wp-admin/includes/plugin.php の読み込みが必要になることに注意。
  • get_current_screen() を組み合わせると、特定の管理画面ページのみで適用できる。
  • class_exists() を使う方法もあり、プラグインによっては有効なチェック方法となる。
よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

This site uses Akismet to reduce spam. Learn how your comment data is processed.

目次