【问题标题】:How to override class-wc-gateway-bacs.php file in Woocommerce如何在 Woocommerce 中覆盖 class-wc-gateway-bacs.php 文件
【发布时间】:2014-08-07 08:27:36
【问题描述】:

我有一个关于覆盖 woocommerce/includes/gateways/bacs/class-wc-gateway-bacs.php 文件的问题

我已编辑此文件并添加了一些其他字段并更改了放置顺序。我尝试了以下位置以尝试使用我的版本:

  • mytheme/woocommerce/includes/gateways/bacs/class-wc-gateway-bacs.php
  • mytheme/woocommerce/includes/gateways/class-wc-gateway-bacs.php
  • mytheme/woocommerce/includes/bacs/class-wc-gateway-bacs.php

上述位置均无效。在我之前的工作中,我通过在 /templates/ 文件夹中放置重载成功地覆盖了 woo-commerce 中的一些文件来完成这个技巧,但这次更复杂。

我不想替换原始文件以防止我的自定义编辑在插件更新时被覆盖。

有没有办法覆盖它?

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    您好 Mosak,我认为您的做法是错误的。由于扩展了 Woocommerce 支付网关,您无法覆盖在模板上工作的插件类,但您应该创建自己的插件,将您的代码挂钩到 woocommerce 使用的过滤器以识别已注册的支付网关。

    add_action('plugins_loaded', 'init_my_gateway_class');
    
    function init_my_gateway_class() {
        add_filter('woocommerce_payment_gateways', 'add_this_class_to_gateway_class');
    
        /**
        * @param array $methods
        * @return string
        */
        function add_this_class_to_gateway_class($methods){
            $methods[] = 'WC_My_Gateway';
            return $methods;
        }
    
        class WC_My_Gateway extends WC_Payment_Gateway{
           /**
            * Here you can create your own payment gateway
            * defining the specs on the constructor.
            **/
        }
    }
    

    假设 WC_My_Gateway 类可能是您对原始 bacs 类的自定义,保持兼容性并保持原始 bacs 类处于活动状态。

    【讨论】:

    • 太棒了!谢谢gadz82,我现在就解决这个问题。如果有问题,我会尽快回来。再次感谢..
    • 你能看看我的代码有什么问题吗?它似乎不起作用并且没有覆盖我正在处理的文件。 gist.github.com/mosak2k12/20189641e05e085c1ee7 我的主要原因是我有一个额外的数组字段用于 bacs 帐户详细信息和重命名标签。所以我唯一的选择是覆盖我的模板中的文件,而不是触及插件的核心。
    猜你喜欢
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2018-02-16
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多