首页 > 解决方案 > 过滤 Woocommerce 订单发送的 PayPal“自定义”字段

问题描述

我需要在“自定义”字段中操作 Woocommerce 发送到 PayPal 的数据。当 Woocommerce 创建订单并发送数据时,可以在

$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 时,我从 Woocommerce 订单中获得了预期值。但是第二次,它的值相同,没有任何改变。

标签: phpwordpresswoocommercepaypal

解决方案


$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;

}

该代码已经过测试并且对我有用。将它添加到您的活动主题的functions.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钩子)


推荐阅读