获取用户自定义元数据值并在 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 );