web-dev-qa-db-ja.com

Plugins_loadedの組み合わせは?

私はwoocommerce支払いゲートウェイ用のプラグインを開発しています。

'plugins_loaded'によって起動されるコールバック関数の中にクラス定義のコードを入れるとうまくいきます。

<?php
    add_action('plugins_loaded','WC_test_gateway_plugin');
    function WC_test_gateway_plugin{
        class my_gateway extends WC_Payment_Gateways{
            //code
        }
    }
?>

しかし、私がそれをグローバルな範囲に入れると、WC_Payment_Gatewaysが未定義であることがわかります。

<?php
    class my_gateway extends WC_Payment_Gateways{
        //code
    }
?>

これら2つのプラクティスの違いは何ですか?

コールバック関数の中にクラス定義を入れるのは悪い習慣ですか?それより良い方法はありますか?

1
kroutony

いつものように/your-plugin-dir/classes/my-gateway.phpのように別のファイルでクラス定義を使用してください。

    <?php
        class my_gateway extends WC_Payment_Gateways {
            //code
        }
    ?>

次に、このCODEを使用して、メインプラグインファイルからplugins_loadedアクションにファイルをインクルードします。

    add_action('plugins_loaded', 'WC_test_gateway_plugin');
    function WC_test_gateway_plugin {
        require_once plugin_dir_path( __FILE__ ) . 'classes/my-gateway.php';
        // instantiate your class here or in your class file or anywhere after this function is called.
    }

WordPressはすべてのプラグインがメインファイルをロードした後にのみWC_Payment_Gatewaysアクションフックを起動するので、今ではWC_Payment_Gatewaysが定義されているので、plugin_loadedにアクセスできます。

2
Fayaz