WooCommerce支付类:__construct

时间:2016-09-23 22:26:04

标签: php wordpress woocommerce

我正在撕掉我的头发,因为我看到的所有例子似乎正在做我正在做的事情......但不管我做什么,我的add_action('init')钩子没有解雇。

在最小,最简洁的示例中,我的支付网关插件如下所示:

function vnmTestPay_init() {

    if (!class_exists('WC_Payment_Gateway')) {
        return;
    }

    class WC_Gateway_Test_Gateway extends WC_Payment_Gateway {

        public function init() {
            $class = __CLASS__;
            new $class;
        }

        public function __construct() {

            add_action('init', array($this, 'process_web_hooks'));

        }

        public static function process_web_hooks() {

            if (!is_admin()) {
                //    In reality, process some $_GET vars and JSON, but for testing...

                die('INIT!');
            }
        }
    }

    //  Add the gateway to WC

    add_filter('woocommerce_payment_gateways', 'vnmTestPay_addGateway');
}

add_action('plugins_loaded', 'vnmTestPay_init', 0);

//  Add the Gateway to WooCommerce

function vnmTestPay_addGateway($methods) {

    if (!in_array('WC_Gateway_Test_Gateway', $methods)) {
        $methods[] = 'WC_Gateway_Test_Gateway';
    }

    return $methods;
}

我想要挂钩WP的init所以我可以处理传入的webhook(带有预期的$_GET参数和JSON代码体系),因为它们在一天内被支付提供商多次发送。在这种情况下,我只是投入die()所以我可以看到它在访问网站的主页时有效,但没有骰子。

我的基础是我的旧付款插件 正确触发init挂钩,但仅仅是因为在实例化类后,我投入了这一行:

add_action('plugins_loaded', array('WC_Gateway_Test_Gateway', 'init'));

......实际上导致一些钩子被触发两次;所以我猜这是的方式。

关于我绊倒的任何想法?

1 个答案:

答案 0 :(得分:0)

我认为问题是因为您不能将$this与静态方法一起使用。不确定如何使用静态方法使用数组。未经测试但您可以尝试self或使该方法非静态。