Как передать несколько пользовательских полей в корзину в Woocommerce? - PullRequest
1 голос
/ 30 марта 2019

У меня есть код, который передает одно пользовательское поле в корзину.Это стало возможным благодаря массиву $ item_data.Как я могу расширить массив, чтобы добавить еще один элемент?Например, enrolmentId?

Код ниже:

function display_enrolment_text_cart( $item_data, $cart_item ) {
    if ( empty( $cart_item['enrolmentName'] ) ) {
        return $item_data;
    }

    $item_data[] = array(
        'key'     => __( 'Enrolment', 'test' ),
        'value'   => wc_clean( $cart_item['enrolmentName'] ),
        'display' => '',
    );

        // add another item to the $item_data[] array

    return $item_data;
}

add_filter( 'woocommerce_get_item_data', 'display_enrolment_text_cart', 10, 2 );

1 Ответ

1 голос
/ 30 марта 2019

Код, который вы используете, не передает какой-либо товар в корзину, он просто отображает существующие пользовательские данные об элементе корзины.

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

add_filter( 'woocommerce_add_cart_item_data', 'add_custom_cart_item_data', 10, 3 ); 
function add_custom_cart_item_data($cart_item_data, $product_id, $variation_id ){
    if( isset( $_POST['product_field1'] ) ) {
        $cart_item_data['custom_data'][1] = sanitize_text_field( $_POST['product_field1'] );
    }
    if( isset( $_POST['product_field2'] ) ) {
        $cart_item_data['custom_data'][2] = sanitize_text_field( $_POST['product_field2'] );
    }
    return $cart_item_data;
}

Теперь для отображения данных пользовательского элемента корзины на страницах корзины и оформления заказа:

add_filter( 'woocommerce_get_item_data', 'display_enrolment_text_cart', 10, 2 );
function display_enrolment_text_cart( $item_data, $cart_item ) {
    if ( isset($cart_item['enrolmentName']) && ! empty($cart_item['enrolmentName']) ) {
        $item_data[] = array(
            'key'     => __( 'Enrolment', 'test' ),
            'value'   => wc_clean( $cart_item['enrolmentName'] ),
            'display' => '',
        );
    }

    // Additional displayed custom cat item data
    if ( isset($cart_item['custom_data'][1]) && ! empty($cart_item['custom_data'][1])  ) {
        $item_data[] = array(
            'key'     => __( 'Field 1', 'test' ),
            'value'   => wc_clean( $cart_item['custom_data'][1] ),
            'display' => '',
        );
    }

    if ( isset($cart_item['custom_data'][2]) && ! empty($cart_item['custom_data'][2])  ) {
        $item_data[] = array(
            'key'     => __( 'Field 2', 'test' ),
            'value'   => wc_clean( $cart_item['custom_data'][2] ),
            'display' => '',
        );
    }
    return $item_data;
}

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

Связанный поток: Сохранение пользовательских данных с помощью метода WC_Cart add_to_cart () в Woocommerce 3

Связанный полный поток: Добавление настраиваемого поля в продуктах для отображения в корзине, оформлении заказа и в заказах

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