获取用户自定义元数据值并在 WooCommerce 订单中更新它
Get user custom meta data value and update it in WooCommerce orders
在 woocommerce 中,我正在尝试向现有的 php 代码添加额外的代码,该代码将值存储到数据库中的高级客户字段。
如您所见,我计算了不同值相加后的值 "Kontostandeintrag",并将该值存储在字段 "Kontostandeintrag" 的 post_meta 中。我对每个订单行都这样做。
这很好用。
作为下一步,我想读取 user_meta 中现有的客户字段“_kontostandaktuell”(针对订单行的客户),将实际值 "Kontostandeintrag" 添加到此字段,然后使用这些字段的总和值再次更新字段“_kontostandaktuell”。因此,在 运行 通过所有订单行后,我应该在每个客户的 user_meta 字段“_kontostandaktuell”中获得所有 "Kontostandeintrag" 值的总和值。
获取用户自定义元数据值并在 WooCommerce 中更新它
我想扩展的现有代码是:
add_filter('woe_get_order_value_Kontostandeintrag', function( $value, $order, $fieldname ) {
$id = $order->get_id();
$value =get_post_meta($id,"GS-Bargeldeinzahlung",true) + $order->get_total() + get_post_meta($id,"GS-Mitgliedsbeitrag",true) + get_post_meta($id,"GS-Nachlass",true) + get_post_meta($id,"GS-Guthabenkonto",true);
global $wpdb;
$data = array("meta_value" =>$value);
$where = array("post_id"=>$id,"meta_key" =>"Kontostandeintrag");
$wpdb->update( "wp_postmeta", $data, $where );
return $value;
},10,3);
从 Woocommerce 3 开始,您的代码有点过时,您不需要使用任何 SQL 查询。所以我重新审视了你的代码,在可用的 WC_Order
对象上使用 some WC_Data
methods。
现在,另外,在此函数中,我们从用户元键“_kontostandaktuell”获取元值,然后更新该元值,将您的计算值添加到其中。
代码:
add_filter('woe_get_order_value_Kontostandeintrag', 'filter_get_order_value_kontostandeintrag', 10, 3 );
function filter_get_order_value_kontostandeintrag( $value, $order, $fieldname ) {
// Calculation from different order meta values
$value = $order->get_total() +
$order->get_meta('GS-Bargeldeinzahlung') +
$order->get_meta('GS-Mitgliedsbeitrag') +
$order->get_meta('GS-Nachlass') +
$order->get_meta('GS-Guthabenkonto');
// Update order meta value for "Kontostandeintrag" key
$order->update_meta_data('Kontostandeintrag', $value );
$order->save(); // Save to database
// Get the User ID from order
$user_id = $order->get_customer_id();
// Get user meta value for "_kontostandaktuell" key
$kontostandaktuell = get_user_meta( $user_id, '_kontostandaktuell', true );
// Update user meta value for "_kontostandaktuell" key
update_user_meta( $user_id, '_kontostandaktuell', $kontostandaktuell + $value );
return $value;
}
应该可以。
相关 WordPress 用户函数文档:get_user_meta()
and update_user_meta()
添加 (与您的评论相关):
之前要重置 _kontostandaktuell
用户字段,您应该从代码中删除:
// Get user meta value for "_kontostandaktuell" key
$kontostandaktuell = get_user_meta( $user_id, '_kontostandaktuell', true );
并从 update_user_meta()
函数中删除 $kontostandaktuell +
,因此您将拥有:
update_user_meta( $user_id, '_kontostandaktuell', $value );
在 woocommerce 中,我正在尝试向现有的 php 代码添加额外的代码,该代码将值存储到数据库中的高级客户字段。
如您所见,我计算了不同值相加后的值 "Kontostandeintrag",并将该值存储在字段 "Kontostandeintrag" 的 post_meta 中。我对每个订单行都这样做。
这很好用。
作为下一步,我想读取 user_meta 中现有的客户字段“_kontostandaktuell”(针对订单行的客户),将实际值 "Kontostandeintrag" 添加到此字段,然后使用这些字段的总和值再次更新字段“_kontostandaktuell”。因此,在 运行 通过所有订单行后,我应该在每个客户的 user_meta 字段“_kontostandaktuell”中获得所有 "Kontostandeintrag" 值的总和值。
获取用户自定义元数据值并在 WooCommerce 中更新它
我想扩展的现有代码是:
add_filter('woe_get_order_value_Kontostandeintrag', function( $value, $order, $fieldname ) {
$id = $order->get_id();
$value =get_post_meta($id,"GS-Bargeldeinzahlung",true) + $order->get_total() + get_post_meta($id,"GS-Mitgliedsbeitrag",true) + get_post_meta($id,"GS-Nachlass",true) + get_post_meta($id,"GS-Guthabenkonto",true);
global $wpdb;
$data = array("meta_value" =>$value);
$where = array("post_id"=>$id,"meta_key" =>"Kontostandeintrag");
$wpdb->update( "wp_postmeta", $data, $where );
return $value;
},10,3);
从 Woocommerce 3 开始,您的代码有点过时,您不需要使用任何 SQL 查询。所以我重新审视了你的代码,在可用的 WC_Order
对象上使用 some WC_Data
methods。
现在,另外,在此函数中,我们从用户元键“_kontostandaktuell”获取元值,然后更新该元值,将您的计算值添加到其中。
代码:
add_filter('woe_get_order_value_Kontostandeintrag', 'filter_get_order_value_kontostandeintrag', 10, 3 );
function filter_get_order_value_kontostandeintrag( $value, $order, $fieldname ) {
// Calculation from different order meta values
$value = $order->get_total() +
$order->get_meta('GS-Bargeldeinzahlung') +
$order->get_meta('GS-Mitgliedsbeitrag') +
$order->get_meta('GS-Nachlass') +
$order->get_meta('GS-Guthabenkonto');
// Update order meta value for "Kontostandeintrag" key
$order->update_meta_data('Kontostandeintrag', $value );
$order->save(); // Save to database
// Get the User ID from order
$user_id = $order->get_customer_id();
// Get user meta value for "_kontostandaktuell" key
$kontostandaktuell = get_user_meta( $user_id, '_kontostandaktuell', true );
// Update user meta value for "_kontostandaktuell" key
update_user_meta( $user_id, '_kontostandaktuell', $kontostandaktuell + $value );
return $value;
}
应该可以。
相关 WordPress 用户函数文档:get_user_meta()
and update_user_meta()
添加 (与您的评论相关):
之前要重置 _kontostandaktuell
用户字段,您应该从代码中删除:
// Get user meta value for "_kontostandaktuell" key
$kontostandaktuell = get_user_meta( $user_id, '_kontostandaktuell', true );
并从 update_user_meta()
函数中删除 $kontostandaktuell +
,因此您将拥有:
update_user_meta( $user_id, '_kontostandaktuell', $value );