How plugins_loaded works?

时间:2017-02-10 作者:kroutony

我正在为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
    }
?>
这两种做法有什么区别?

将类定义放在回调函数中是一种不好的做法吗?还有更好的方法吗?

1 个回复
最合适的回答,由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 只有在所有插件都加载了它们的主文件之后,才能执行操作挂钩。

相关推荐