wc_update_order_item неправильно сохраняется - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь обновить Имя элемента в таблице 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;

wc_update_order_item() - это место, где предполагается обновить заказимя элемента.Он действительно обновляет имя_порядка_имя, но не с текущим значением $ products-> post-> post_title.Он обновляется со случайным названием продукта.

Как узнать, что сохраняемый заголовок отличается от текущего post_title внутри цикла?Если я echo $products->post->post_title внутри цикла, он отображает текущее название продукта, как и должно быть, но обновленный order_item_name имеет другое значение.

1 Ответ

0 голосов
/ 21 ноября 2018

Попробуйте следующее, чтобы получить соответствующие идентификаторы продуктов, соответствующие позициям заказа, чтобы исключить их из 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, невозможно узнать, что на самом деле происходит.Лучше объяснить с самого начала, что вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...