Автоматическая настройка продукта Woocommerce на черновой статус, если заказ выполнен - PullRequest
0 голосов
/ 04 мая 2018

В WooCommerce я хотел бы установить для продуктов статус черновика, когда заказ завершен… Итак, я хочу, чтобы продукты продавались 1 раз и передавались в черновик, когда заказ был выполнен.

Есть идеи?

1 Ответ

0 голосов
/ 04 мая 2018

Попробуйте следующий код, который установит товары, найденные в позициях заказа со статусом "черновик", только когда заказ получает статус "обработка" или "завершен" (статусы оплаченного заказа) :

add_action( 'woocommerce_order_status_changed', 'action_order_status_changed', 10, 4 );
function action_order_status_changed( $order_id, $old_status, $new_status, $order ){
    // Only for processing and completed orders
    if( ! ( $new_status == 'processing' || $new_status == 'completed' ) )
        return; // Exit

    // Checking if the action has already been done before
    if( get_post_meta( $order_id, '_products_to_draft', true ) )
        return; // Exit

    $products_set_to_draft = false; // Initializing variable 

    // Loop through order items
    foreach($order->get_items() as $item_id => $item ){
        $product = $item->get_product(); // Get the WC_Product object instance
        if ('draft' != $product->get_status() ){
            $product->set_status('draft'); // Set status to draft
            $product->save(); // Save the product
            $products_set_to_draft = true;
        }
    }
    // Mark the action done for this order (to avoid repetitions)
    if($products_set_to_draft)
        update_post_meta( $order_id, '_products_to_draft', '1' );
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Если вы хотите, чтобы предназначался только для «выполненных» заказов , вы можете заменить эту строку:

  if( ! ( $new_status == 'processing' || $new_status == 'completed' ) )

этим:

  if( $new_status != 'completed' )
...