在woocommerce中,我试图在现有的php代码中添加额外的代码,将一个值存储到数据库中的高级客户字段。
正如你所看到的,我计算出 "Kontostandeintrag "这个值,作为不同值的结果,并将这个值存储在post_meta的 "Kontostandeintrag "字段中。我为每个订单行做了这个工作。
这样做的效果很好。
下一步,我想读取user_meta中现有的客户字段"_kontostandaktuell"(订单行的客户),将实际值 "Kontostandeintrag "添加到这个字段中,然后用这个字段的总和值再次更新字段"_kontostandaktuell"。因此,在运行完所有订单行后,我应该在用户_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_Data
方法 在现有的 WC_Order
Object.现在,在这个函数中,我们从用户元键"_kontostandaktuell "中获取元值,然后更新该元值,加入你的计算值。
现在,另外,在这个函数中,我们从用户元键"_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()
和 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 );