客户创建订阅并通过 WooCommerce 告诉我他需要什么。使用用户元数据将要求存储在用户配置文件内。当他在前端的 WooCommerce 我的帐户区域中更新此内容时,它会在 Wordpress 客户配置文件中很好地更新。没有问题。
我遇到的问题是,当他通过前端 WooCommerce 帐户区域内的自定义字段更新要求时,订阅会不断地一遍又一遍地更新他的旧要求。我如何获得它,以便在订阅续订时它使用帐户区域内找到的最新自定义字段数据?
示例: /image/UEMpY.png
这就是我现在所拥有的。在下面的示例中,我尝试将用户元复制到订单元并在订阅续订时更新它。由于某种原因它没有更新。也许这就是错误的方式。我的 PHP 能力非常有限。谁能给点建议吗?
// update subscription meta order
add_action('woocommerce_subscription_renewal_payment_complete','subscription_renew');
function subscription_renew( $order_id ) {
$order = wc_get_order( $order_id ); // get the order id
$user_id = $order->get_user_id(); // get the user id
if ( $order->get_total() > 1 ) { // not sure why this is here
$getsend = get_user_meta( $user_id, 'send' ); // grab the user meta field 'send'
$getcategories = get_user_meta( $user_id, 'categories' ); // grab the user meta field 'categories'
// now do the update
$order->update_meta_data( $user_id, 'send', $getsend ); // update user order meta field 'send'
$order->update_meta_data( $user_id, 'categories', $getcategories ); // update user order meta field 'categories'
$order_id = $order->save(); // save the order
return $order_id;
}
}
最佳答案
您的代码中有一些错误。您应该从以下位置删除 $user_id
参数:
// now do the update
$order->update_meta_data( $user_id, 'send', $getsend ); // update user order meta field 'send'
$order->update_meta_data( $user_id, 'categories', $getcategories ); // update user order meta field 'categories'
替换为:
// now do the update
$order->update_meta_data( 'send', $getsend ); // update user order meta field 'send'
$order->update_meta_data( 'categories', $getcategories ); // update user order meta field 'categories'
现在应该可以更好地工作了。
与 woocommerce_subscription_renewal_ payment_complete
Hook 相关的更新:
看起来好像是to the docs对于其他一些代码示例,该 Hook 有 2 个参数: $subscription
和 $last_order
(但不是 $order_id
).
这是一个应该真正起作用的不同代码版本,将您的自定义用户数据添加到最后一个相关的续订订单中,作为订单元数据:
add_action( 'woocommerce_subscription_renewal_payment_complete', 'add_order_meta_from_custom_user_meta', 10, 2 );
function add_order_meta_from_custom_user_meta( $subscription, $last_order ) {
if( ! $subscription )
return;
$user_id = $last_order->get_user_id(); // Get the user id
if( $send = get_user_meta( $user_id, 'send', true ) ) {
$last_order->update_meta_data( 'send', $send );
}
if( $categories = get_user_meta( $user_id, 'categories', true ) ) {
$last_order->update_meta_data( 'categories', $categories );
}
if( isset($send) || isset($categories) ) {
$last_order->save();
}
}
代码位于事件子主题(或事件主题)的 function.php 文件中。它应该能更好地工作。
关于php - 在 WooCommerce 中添加一些用户元数据作为订单元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62328993/