Как добавить дополнительные услуги в корзину WooCommerce?

Для добавления дополнительных услуг в корзину WooCommerce вам потребуется немного кодирования и настройки. Вот шаги, которые вам нужно выполнить:

Шаг 1: Создайте дополнительные поля для услуг
Первым делом вам понадобится создать дополнительные поля для услуг, которые вы хотите добавить в корзину. Чтобы это сделать, вы можете добавить функцию в functions.php вашей WordPress темы, используя хук "woocommerce_before_add_to_cart_button". В этой функции вы создаете всплывающее окно для выбора услуг и сохраняете значения в пользовательский метаданных товара.

function add_extra_services() {
    global $product;
    echo '<div class="extra-services">
        <h2>Дополнительные услуги:</h2>
        <input type="checkbox" name="extra_service1" value="extra_service1" /> Дополнительная услуга 1<br>
        <input type="checkbox" name="extra_service2" value="extra_service2" /> Дополнительная услуга 2<br>
        </div>';
}
add_action( 'woocommerce_before_add_to_cart_button', 'add_extra_services' );

function save_extra_services( $cart_item_data, $product_id ) {
    if( isset( $_POST['extra_service1'] ) ) {
        $cart_item_data['extra_service1'] = $_POST['extra_service1'];
    }
    if( isset( $_POST['extra_service2'] ) ) {
        $cart_item_data['extra_service2'] = $_POST['extra_service2'];
    }
    
    return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'save_extra_services', 10, 2 );

function display_services_cart( $item_name, $cart_item, $cart_item_key ) {
    if ( isset( $cart_item['extra_service1'] ) ) {
        $item_name .= '<br>' . 'Дополнительная услуга 1: ' . $cart_item['extra_service1'];
    }
    if ( isset( $cart_item['extra_service2'] ) ) {
        $item_name .= '<br>' . 'Дополнительная услуга 2: ' . $cart_item['extra_service2'];
    }
    
    return $item_name;
}
add_filter( 'woocommerce_cart_item_name', 'display_services_cart', 10, 3 );

Шаг 2: Отобразите выбранные услуги в корзине и чекауте
Теперь, когда вы создали дополнительные поля и сохраняете их значения в корзину, нужно отобразить выбранные услуги в корзине и чекауте. Для этого вы можете использовать хук "woocommerce_cart_item_name" и функцию "display_services_cart" из примера выше.

Шаг 3: Сохраните выбранные услуги при оформлении заказа
При оформлении заказа выбранные услуги также должны быть сохранены. Для этого вам нужно добавить функцию, использующую хук "woocommerce_checkout_create_order_line_item", которая сохраняет дополнительные значения в заказ.

function save_services_order( $item, $cart_item_key, $values, $order ) {
    if ( isset( $values['extra_service1'] ) ) {
        $item->add_meta_data( 'Дополнительная услуга 1', $values['extra_service1'] );
    }
    if ( isset( $values['extra_service2'] ) ) {
        $item->add_meta_data( 'Дополнительная услуга 2', $values['extra_service2'] );
    }
}
add_action( 'woocommerce_checkout_create_order_line_item', 'save_services_order', 10, 4 );

Шаг 4: Отобразите выбранные услуги в деталях заказа
Чтобы отобразить выбранные услуги в деталях заказа, вы можете использовать хук "woocommerce_order_item_name" и функцию "display_services_order".

function display_services_order( $name, $item, $is_visible ) {
    if ( $item->is_type( 'line_item' ) ) {
        $extra_services = array();
        if ( $value = $item->get_meta( 'Дополнительная услуга 1', true ) ) {
            $extra_services[] = 'Дополнительная услуга 1: ' . $value;
        }
        if ( $value = $item->get_meta( 'Дополнительная услуга 2', true ) ) {
            $extra_services[] = 'Дополнительная услуга 2: ' . $value;
        }
        
        if ( ! empty( $extra_services ) ) {
            $name .= '<br>' . implode( '<br>', $extra_services );
        }
    }
    
    return $name;
}
add_filter( 'woocommerce_order_item_name', 'display_services_order', 10, 3 );

Это основы того, как добавить дополнительные услуги в корзину WooCommerce. Вы можете настроить код и полиэтиленовую пользовательскую ввод и понизить его в соответствии с вашими потребностями.