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

Я посмотрел на это решение, но оно не полностью охватывает нашу ситуацию. Автоматическая настройка продукта Woocommerce на черновой статус, если заказ выполнен

Я пытаюсь настроить таргетинг на определенные варианты продукта, которые имеют атрибут продукта "pa_type" с именем термина "Эксклюзивная покупка". Затем, если этот вариант приобретен, статус продукта родительской переменной должен быть установлен на черновик.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 31 октября 2018

Обновление: Для обработки только определенного варианта продукта с атрибутом продукта таксономия pa_type с именем термина "Exclusive purchase" , который будет установите статус публикации продукта родительской переменной на «черновик», используйте следующее:

add_action( 'woocommerce_order_status_changed', 'paid_order_statuses_set_variable_product_to_draft', 10, 4 );
function paid_order_statuses_set_variable_product_to_draft( $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 ){
        // Get the current WC_Product object instance
        $product = $item->get_product(); 

        // Targetting a specific product variations ( Taxonomy: 'pa_type' | term name: 'Exclusive purchase' )
        if( $product->is_type('variation') && $product->get_attribute('pa_type') == 'Exclusive purchase' ){
            // Get the parent variable product instance object
            $parent_product = wc_get_product( $item->get_product_id() );

            if ('draft' != $parent_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 вашей активной дочерней темы (или активной темы). Проверено и работает.

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