1)测试并获得发送的数据
只需注册并获取发送到PayPal的论点,我用钩子是这样的:
add_filter('woocommerce_paypal_args', 'custom_paypal_args', 10, 2);
function custom_paypal_args ($args, $order) {
// Saving the data to order meta data (custom field)
update_post_meta($order->get_id(), '_test_paypal', $args);
return $args;
}
代码放在功能。你的活动儿童主题(或主题)的php文件或任何插件文件。
现在我可以简单地使用这个数据(设置正确的顺序编号):
// Only visible on shop pages by admins
add_action('woocommerce_before_main_content', function(){
// Only visible by admins
if(! current_user_can('manage_options')) return;
$order_id = 648;
$data_sent_to_paypal = get_post_meta($order_id, '_test_paypal');
echo '<pre>'; print_r($data_sent_to_paypal); echo '</pre>';
}, 10, 0);
: $order_id = 648;
$data_sent_to_paypal = get_post_meta($order_id, '_test_paypal');
echo '<pre>'; print_r($data_sent_to_paypal); echo '</pre>';
或者在钩(在这个例子中只为管理员店铺页面上看到)
这给了我这样一个输出(2个产品和不同的数量):
Array
(
[0] => Array
(
[cmd] => _cart
[business] => [email protected]
[no_note] => 1
[currency_code] => EUR
[charset] => utf-8
[rm] => 2
[upload] => 1
[return] => https://example.com/checkout/order-received/8877?key=wc_order_55445ndfgbulfdf&utm_nooverride=1
[cancel_return] => https://example.com/cart/?cancel_order=true&order=wc_order_55445ndfgbulfdf&order_id=8877&redirect&_wpnonce=34m7kl83455
[page_style] =>
[image_url] => https://example.com/wp-content/uploads/2012/06/logo.png
[paymentaction] => sale
[bn] => WooThemes_Cart
[invoice] => pp-8877
[custom] => {"order_id":8877,"order_key":"wc_order_55445ndfgbulfdf"}
[notify_url] => https://example.com/wc-api/WC_Gateway_Paypal/
[first_name] => John
[last_name] => Doe
[address1] => Test st.
[address2] =>
[city] => wef
[state] => AR
[zip] => 43242
[country] => US
[email] => [email protected]
[night_phone_a] => 078
[night_phone_b] => 653
[night_phone_c] => 6216
[no_shipping] => 1
[tax_cart] => 16.55
[item_name_1] => Test Product - Service
[quantity_1] => 1
[amount_1] => 71
[item_number_1] =>
[item_name_2] => Test Product 1
[quantity_2] => 1
[amount_2] => 66
[item_number_2] =>
[item_name_3] => Test Product 2
[quantity_3] => 1
[amount_3] => 120
[item_number_3] =>
[item_name_4] => Test Product 3
[quantity_4] => 1
[amount_4] => 45
[item_number_4] =>
)
)
正如您现在所看到的,使用woocommerce_paypal_args
您将能够更改或删除任何参数。
有永远只有一个:'item_name_1'
,'quantity_1'
,'amount_1'
和'item_number_1'
与总是发送到贝宝指数1
。
2操纵数据一起发送(例如):
我们仍然可以使用woocommerce_paypal_args
,例如过滤钩子上'item_name_1'
键,由以更换项目名称数量,只要你想:
add_filter('woocommerce_paypal_args', 'custom_paypal_args', 10, 2);
function custom_paypal_args ($args, $order) {
$$args_keys = array_keys($args);
$i = 0;
// Iterating through order items
foreach($order->get_items() as $item_id => $item_product){
$i++; // updating count.
if(! empty($args["item_name_$i"])){
// Returning the order invoice in the item name
$args["item_name_$i"] = "invoice #" . $order->get_id();
}
}
return $args;
}
代码发送到您活动的子主题(或主题)的function.php文件中,也可以放在任何插件文件中。
的代码进行测试和WooCommerce 3+工作
要完成:当你的WC_Order对象作为参数,在钩挂的函数,你可以用它来从订单获得任何数据并根据您喜欢的方式操纵发送到PayPal网关的数据。
看到这个相关答案:How to get WooCommerce order details
敬爱卢瓦克,关于操纵'$ args',它需要的第一个项目后删除卡中的所有其他项目。此外,设置第一个项目的价格等于购物车的整个价格(因为只有一个单一项目)。所以这是编辑后的自定义功能。你可以在你的回答中加入:[***自定义函数修改'$ args' ***](https://paste.ubuntu.com/25567534/) – DummyBeginner
** 1。**你在哪里运行上面的代码(在**测试部分**)给你的数组? WordPress/Woocommerce中的哪个文件可以放置代码来检索post_meta并打印您显示的数组? ** 2。**如果没有'woocommerce_paypal_args'过滤器钩子,我们如何重写我们编写的插件或主题的function.php中的get_request_url()?我的问题是覆盖任何插件的功能,在我们的自定义插件或主题的function.php – DummyBeginner
通用谢谢,关于答案** 2 **:我想知道如何重写插件函数(如woocommerce)如果没有可用的钩子。我们如何重写函数并更改其功能而不更改插件更新后会丢失的插件核心? ... 关于答案** 3 **:当我在购物车中有多个物品时,还会有_item_name_2_,_item_name_3_,_item_name_4_ ...。 Woocommerce版本:'3.1.2' – DummyBeginner