Отобразить значение настраиваемого поля продукта в корзине WooCommerce и в таблице покупок - PullRequest
0 голосов
/ 07 апреля 2019

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

add_filter( 'woocommerce_add_cart_item_data', 'save_days_field', 10, 2 );
function save_days_field( $cart_item_data, $product_id ) {
    $special_item = get_post_meta( $product_id , 'description',true );

    if(!empty($special_item)) {
        $cart_item_data[ 'description' ] = $special_item;

        // below statement make sure every add to cart action as unique line item
        $cart_item_data['unique_key'] = md5( microtime().rand() );
        WC()->session->set( 'description', $special_item );
    }
    return $cart_item_data;
}

// Render meta on cart and checkout
add_filter( 'woocommerce_get_item_data','rendering_meta_field_on_cart_and_checkout', 10, 2 );
function rendering_meta_field_on_cart_and_checkout( $cart_item_data, $cart_item ) {
    if( isset( $cart_item['description'] ) ) {
        $cart_item_data[] = array( "name" => __( "Description", "woocommerce" ), "value" => $cart_item['description'] );
    }
    return $cart_item_data;
}

Теперь мне нужно отобразить ТОЛЬКО значение (не имя метки «Описание») этого настраиваемого поля в таблице корзины и оформления заказа . Мне нужно отобразить с <small>, как атрибут, который я отображаю с этим кодом:

add_filter('woocommerce_cart_item_name', 'wp_woo_cart_attributes', 10, 2);
function wp_woo_cart_attributes($cart_item, $cart_item_key){
    $productId = $cart_item_key['product_id'];
    $product = wc_get_product($productId);
    $taxonomy = 'pa_color';
    $value = $product->get_attribute($taxonomy);

    if ($value) {
        $label = get_taxonomy($taxonomy)->labels->singular_name;
        $cart_item .= "<small>$value</small>";
    }
    return $cart_item;
}

Как я могу сделать это для этого настраиваемого поля, отображая только значение?

1 Ответ

1 голос
/ 07 апреля 2019

Вам не нужно включать пользовательское поле продукта в качестве данных пользовательской корзины, так как оно напрямую доступно из объекта продукта (или ID продукта) .

Примечание: В переменной элемента корзины $cart_item объект WC_Product включен и доступен с использованием $cart_item['data'].

Попробуйте добавить добавленное поле после имени элемента в корзине и на страницах оформления заказа следующее:

// Display in cart and checkout pages
add_filter( 'woocommerce_cart_item_name', 'customizing_cart_item_name', 10, 3 );
function customizing_cart_item_name( $product_name, $cart_item, $cart_item_key ) {
    $product = $cart_item['data']; // Get the WC_Product Object

    if ( $value = $product->get_meta('description') ) {
        $product_name .= '<small>'.$value.'</small>';
    }
    return $product_name;
}

Чтобы отобразить его в заказах и уведомлениях по электронной почте, используйте:

// Display in orders and email notifications
add_filter( 'woocommerce_order_item_name', 'customizing_order_item_name', 10, 2 );
function customizing_order_item_name( $product_name, $item ) {
    $product = $item->get_product(); // Get the WC_Product Object

    if ( $value = $product->get_meta('description') ) {
        $product_name .= '<small>'.$value.'</small>';
    }
    return $product_name;
}

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

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