私は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つのプラクティスの違いは何ですか?
コールバック関数の中にクラス定義を入れるのは悪い習慣ですか?それより良い方法はありますか?
いつものように/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
にアクセスできます。