我正在尝试更新wp_woocommerce_order_items
表中的商品名称,并找到功能wc_update_order_item
来解决问题。
我希望它更改为随机选择的产品。它们的主要作用是我已经知道我要更改的order_item_id
。
这是我的代码:
$order_item_id = array(1,2,3);
$num = 3;
$ctr = 0;
$products = new WP_Query( array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => $num,
'orderby' => 'rand',
));
if ( $products->have_posts() ): while ( $products->have_posts() ): $products->the_post();
wc_update_order_item($order_item_id[$ctr], array('order_item_name' => $products->post->post_title));
$ctr++;
endwhile; wp_reset_postdata(); endif;
应该{{1}}来更新订单商品名称。它会更新order_item_name,但不会更新当前的$ products-> post-> post_title值。它会以随机的产品标题进行更新。
我如何知道要保存的标题与循环中当前的post_title不同?如果我在循环中wc_update_order_item()
,它会按原样显示当前产品名称,但是更新后的echo $products->post->post_title
具有不同的值。
答案 0 :(得分:1)
尝试以下操作将获得与订单商品相对应的相关产品ID,将它们从WP_Query中排除,避免使用相同的产品名称:
$order_item_ids = array(1,2,3);
$num = 3;
$ctr = 0;
$exluded_ids = array();
// Loop through the Order items Ids
foreach ( $order_item_ids as $item_id ) {
// Get the order ID from the order Item ID
$order_id = wc_get_order_id_by_order_item_id( $item_id );
// Get the WC_Order object instance
$order = wc_get_order( $order_id );
// Get the WC_Order_Item_Product object instance
$item = $order->get_item( $item_id );
// Products IDs to be excluded from the WP_Query (array)
$exluded_ids[] = $item->get_product_id();
}
$products = new WP_Query( array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => $num,
'orderby' => 'rand',
'post__not_in' => $exluded_ids,
));
if ( $products->have_posts() ):
while ( $products->have_posts() ): $products->the_post();
wc_update_order_item($order_item_id[$ctr], array('order_item_name' => $products->post->post_title));
$ctr++;
endwhile;
wp_reset_postdata();
endif;
应该可以。
现在,由于我们不知道如何获得$order_item_id
数组,因此无法知道真正发生了什么。最好从一开始就说明您要做什么。