我正在为woocommerce支付网关开发一个插件。
当我把类定义的代码放在由“plugins\\u-loaded”触发的回调函数中时,它就工作了。
<?php
add_action(\'plugins_loaded\',\'WC_test_gateway_plugin\');
function WC_test_gateway_plugin{
class my_gateway extends WC_Payment_Gateways{
//code
}
}
?>
但当我将其放入全局范围时,它将显示WC\\U Payment\\U网关尚未定义。
<?php
class my_gateway extends WC_Payment_Gateways{
//code
}
?>
这两种做法有什么区别?
将类定义放在回调函数中是一种不好的做法吗?还有更好的方法吗?
最合适的回答,由SO网友:Fayaz 整理而成
在单独的文件中使用类定义,例如/your-plugin-dir/classes/my-gateway.php
像往常一样:
<?php
class my_gateway extends WC_Payment_Gateways {
//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.
}
现在您可以访问
WC_Payment_Gateways
因为现在
WC_Payment_Gateways
已定义,因为WordPress激发
plugin_loaded
只有在所有插件都加载了它们的主文件之后,才能执行操作挂钩。