我正在撕掉我的头发,因为我看到的所有例子似乎正在做我正在做的事情......但不管我做什么,我的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'));
......实际上导致一些钩子被触发两次;所以我猜这是不的方式。
关于我绊倒的任何想法?
答案 0 :(得分:0)
我认为问题是因为您不能将$this
与静态方法一起使用。不确定如何使用静态方法使用数组。未经测试但您可以尝试self
或使该方法非静态。