我正在为WooCommerce订单创建克隆功能. 我想要的是确保产品项元数据被正确克隆.

 /**
 * Get the original order items to be clone
 * Each product inside the new order must also contain the meta_data
 */
$order     = wc_get_order($post_id);
$new_order = wc_get_order($new_post_id);
foreach ($order->get_items() as $item_id => $item) {
    $product_id = $item->get_product_id();
    $quantity   = $item->get_quantity();

    // Get product's meta data values
    $_wwp_wholesale_priced = get_post_meta( $product_id, '_wwp_wholesale_priced', true);
    $_wwp_wholesale_role = get_post_meta( $product_id, '_wwp_wholesale_role', true);
    $_amount_requested = get_post_meta( $product_id, '_amount_requested', true);
    $_amount_colli = get_post_meta( $product_id, '_amount_colli', true);

    $args       = array(
      '_wwp_wholesale_priced' => $_wwp_wholesale_priced,
      '_wwp_wholesale_role'   => $_wwp_wholesale_role,
      '_amount_requested'     => $_amount_requested,
      '_amount_colli'         => $_amount_colli,              
    );

    $new_order->add_product(wc_get_product($product_id), $quantity, $args);
}

在文档中,看起来传递$args应该可以做到这一点,但我没有看到传递任何meta.我也试过使用$item->add_meta_data$item->update_meta_data,但它们似乎不起作用.我遗漏了什么?

Goal: What I want

Current: Currently

推荐答案

您的代码中有一些错误和遗漏的内容,请try 以下操作:

 /**
 * Get the original order items to be clone
 * Each product inside the new order must also contain the meta_data
 */

$order     = wc_get_order($post_id);
$new_order = wc_get_order($new_post_id);

foreach ($order->get_items() as $item) {
    $product  = $item->get_product(); // get an instance of the WC_Product Object

    $new_item_id = $new_order->add_product($product, $item->get_quantity()); // Add the product
    $new_item    = $new_order->get_item( $new_item_id, false ); // Get the new item

    // Add custom meta data (afterwards)
    $new_item->add_meta_data( '_wwp_wholesale_priced', $item->get_meta('_wwp_wholesale_priced'), true );
    $new_item->add_meta_data( '_wwp_wholesale_role', $item->get_meta('_wwp_wholesale_role'), true );
    $new_item->add_meta_data( '_amount_requested', $item->get_meta('_amount_requested'), true );
    $new_item->add_meta_data( '_amount_colli', $item->get_meta('_amount_colli'), true );
    $new_item->save(); // Save item data
}
// Calculate totals and save order data
$new_order->calculate_totals();

我该工作了.

Php相关问答推荐

根据特定运输类别增加WooCommerce购物车总重量

PHP-转义字符串内的双反斜杠

PHP,ZipArchive删除一个空文件?

WooCommerce基于元数据的自定义范围目录排序

使用WordPress wp_mail()的邮箱标题无效

如何显示每个分类的当前术语的帖子中包含的前20个标签,不包括标签分类

根据未用于变体的产品属性隐藏WooCommerce发货方式

如何确保所有语言文件都使用Laravel中的新密钥进行更新?

是否重新排序多维数组元素以将所有子数组中的子数组移动到元素列表的底部?

这是在可召回的背景下吗?

如何从Laravel中的Spatie\Dns\Records\A对象中提取IP地址

如何使用定制的StateProvider设置JsonLd@上下文?

从 WooCommerce 购物车中删除总计部分,同时保留小计行

.htaccess 重写规则问题

如何在 PHP laravel 中将图像的透明背景转换为白色?

如何从 PHP 中的 .txt 文件中列出今天生日的人的姓名?

PHP 自动函数参数和变量

在全局安装 Composer 包后运行命令

在 EasyAdmin 中添加全局操作,将我的按钮放在表格下方而不是上方

为什么 PDO 允许使用带命名占位符的索引数组,但仅在禁用仿真时才允许?