我需要在"自定义"字段中操作Wooccommerce发送给PayPal的数据。当Wooccommerce创建订单并发送数据时,可以在中找到
$order['custom']
这个字符串是json编码的,我尝试使用一个过滤器,但它似乎不起作用。这是我得到的:
add_filter('woocommerce_paypal_args', 'send_custom_paypal_data');
function send_custom_paypal_data($order) {
error_log(print_r($order['custom'], true)); //log variable
$order['custom'] = wp_json_encode(
array(
'field1' => 'some value',
'field2' => 'more values'
)
);
error_log(print_r($order['custom'], true)); //log value after updating variable
return $order;
}
第一次将$order['custom']
变量转储到error_log时,我从Wooccommerce订单中获得了预期值。但第二次,它的价值是一样的,什么都没有改变。
$order
是第二个参数,而不是第一个。
您还应该设置挂钩优先级和参数的数量。
woocommerce_paypal_args
钩子定义在:/woocommerce/includes/gateways/paypal/includes/class-wc-gateway-paypal-request.php
中。
试试这个:
add_filter( 'woocommerce_paypal_args', 'send_custom_paypal_data', 10, 2 );
function send_custom_paypal_data( $args, $order ) {
error_log( print_r( $args['custom'], true) ); //log variable
$args['custom'] = wp_json_encode(
array(
'field1' => 'some value',
'field2' => 'more values'
)
);
error_log( print_r( $args['custom'], true) ); //log value after updating variable
return $args;
}
代码已经过测试,对我有效。将其添加到活动主题的函数.php中。
日志报告
第一个日志返回:
[10-Apr-2021 08:54:04 UTC] {"order_id":145,"order_key":"wc_order_8FSKEF2hg2UVu"}
第二种:
[10-Apr-2021 08:54:04 UTC] {"field1":"some value","field2":"more values"}
它对我很有效。
如果不起作用
- 您正在使用WooCommerce插件中包含的PayPal网关,对吧
- 您是否检查过是否有任何其他函数覆盖您的函数?或者他们有更高的优先级
- 你是否安装了另一个PayPal插件?在这种情况下,请将其停用
相关答案(使用woocommerce_paypal_args
挂钩(
- 如何在Wooccommerce中动态更改PayPal地址
- 向Paypal Wooccommerce添加自定义参数
- 在Woocommerce中只向PayPal发送订单号而不是商品名称