获取用户自定义元数据值,并在WooCommerce订单中进行更新。

问题描述 投票:1回答:1

在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);
php wordpress woocommerce metadata orders
1个回答
0
投票

由于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 );
© www.soinside.com 2019 - 2024. All rights reserved.