Мне нужно скрыть поле «количество» для определенного продукта в cart.php
Вот мой cart.php . Если атрибутом является Color, поле количества должно скрываться. Я попробовал $attributes = $product->get_attributes();
но я потерпел неудачу, или что-то у меня пропало. У меня есть изображение изображения и мой код cart.php. Пожалуйста, помогите мне.
<?php if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } wc_print_notices(); do_action( 'woocommerce_before_cart' ); ?> <form id="cart-table" action="<?php echo esc_url( WC()->cart->get_cart_url() ); ?>" method="post"> <?php do_action( 'woocommerce_before_cart_table' ); ?> <table class="shop_table cart" cellspacing="0"> <thead> <tr> <th class="product-remove"> </th> <th class="product-thumbnail"> </th> <th class="product-name"><?php _e('Product', 'yit'); ?></th> <th class="product-price"><?php _e('Price', 'yit'); ?></th> <th class="product-quantity"><?php _e('Quantity', 'yit'); ?></th> <th class="product-subtotal"><?php _e('Total', 'yit'); ?></th> </tr> </thead> <tbody> <?php do_action( 'woocommerce_before_cart_contents' ); ?> <?php foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key ); $product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key ); if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_cart_item_visible', true, $cart_item, $cart_item_key ) ) { ?> <tr class = "<?php echo esc_attr( apply_filters('woocommerce_cart_item_class', 'cart_item', $cart_item, $cart_item_key ) ); ?>"> <td class="product-remove"> <?php echo apply_filters( 'woocommerce_cart_item_remove_link', sprintf('<a href="%s" class="remove" title="%s">×</a>', esc_url( WC()->cart->get_remove_url( $cart_item_key ) ), __('Remove this item', 'yit') ), $cart_item_key ); ?> </td> <td class="product-thumbnail"> <?php $thumbnail = apply_filters( 'woocommerce_cart_item_thumbnail', $_product->get_image(), $cart_item, $cart_item_key ); if ( ! $_product->is_visible() ) echo $thumbnail; else printf( '<a href="%s">%s</a>', $_product->get_permalink( $cart_item ), $thumbnail ); ?> </td> <td class="product-name"> <?php if ( ! $_product->is_visible() ) echo apply_filters( 'woocommerce_cart_item_name', $_product->get_title(), $cart_item, $cart_item_key ); else echo apply_filters( 'woocommerce_cart_item_name', sprintf( '<a href="%s">%s</a>', $_product->get_permalink( $cart_item ), $_product->get_title() ), $cart_item, $cart_item_key ); // Meta data Remove 'lala' from echo here by Rupom echo ''. WC()->cart->get_item_data( $cart_item ); // Backorder notification if ( $_product->backorders_require_notification() && $_product->is_on_backorder( $cart_item['quantity'] ) ) echo '<p class="backorder_notification">' . __('Available on backorder', 'yit') . '</p>'; ?> </td> <td class="product-price"> <?php echo apply_filters( 'woocommerce_cart_item_price', WC()->cart->get_product_price( $_product ), $cart_item, $cart_item_key ); ?> </td> <td class="product-quantity"> <?php if ( $_product->is_sold_individually() ) { $product_quantity = sprintf( '1 <input type="hidden" name="cart[%s][qty]" value="1" />', $cart_item_key ); }else { $product_quantity = woocommerce_quantity_input( array( 'input_name' => "cart[{$cart_item_key}][qty]", 'input_value' => $cart_item['quantity'], 'max_value' => $_product->backorders_allowed() ? '' : $_product->get_stock_quantity(), 'min_value' => '0' ), $_product, false ); } echo apply_filters( 'woocommerce_cart_item_quantity', $product_quantity, $cart_item_key ); ?> </td> <td class="product-subtotal"> <?php echo apply_filters( 'woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal( $_product, $cart_item['quantity'] ), $cart_item, $cart_item_key ); ?> </td> </tr> <?php } } do_action( 'woocommerce_cart_contents' ); ?> <tr> <td colspan="6" class="actions"> <?php if ( WC()->cart->coupons_enabled() ) { ?> <div class="coupon"> <label for="coupon_code"><?php _e('Coupon', 'yit'); ?>:</label> <input name="coupon_code" class="input-text" id="coupon_code" value="" /> <input type="submit" class="button" name="apply_coupon" value="<?php _e('Apply Coupon', 'yit'); ?>" /> <?php do_action('woocommerce_cart_coupon'); ?> </div> <?php } ?> <input type="submit" class="button" name="update_cart" value="<?php _e('Update Cart', 'yit'); ?>" /> <input type="submit" class="checkout-button button alt" name="proceed" value="<?php _e('Proceed to Checkout →', 'yit'); ?>" /> <?php do_action('woocommerce_cart_actions'); ?> <?php wp_nonce_field( 'woocommerce-cart') ?> </td> </tr> <?php do_action( 'woocommerce_after_cart_contents' ); ?> </tbody> </table> <?php do_action( 'woocommerce_after_cart_table' ); ?> </form> <div class="cart-collaterals row-fluid"> <?php do_action('woocommerce_cart_collaterals'); ?> <?php //woocommerce_cart_totals(); ?> <?php woocommerce_shipping_calculator(); ?> </div> <?php do_action( 'woocommerce_after_cart' ); ?>
Вот код поля количества
<td class="product-quantity"> <?php if ( $_product->is_sold_individually() ) { $product_quantity = sprintf( '1 <input type="hidden" name="cart[%s][qty]" value="1" />', $cart_item_key ); }else { $product_quantity = woocommerce_quantity_input( array( 'input_name' => "cart[{$cart_item_key}][qty]", 'input_value' => $cart_item['quantity'], 'max_value' => $_product->backorders_allowed() ? '' : $_product->get_stock_quantity(), 'min_value' => '0' ), $_product, false ); } echo apply_filters( 'woocommerce_cart_item_quantity', $product_quantity, $cart_item_key ); ?> </td>
$attributes = $product->get_attributes();
возвращает массив атрибутов продукта, поэтому вам понадобится хотя бы какая-то условная логика, так как возврата атрибутов не будет достаточно.
Если вы заметили эту строку:
echo apply_filters( 'woocommerce_cart_item_quantity', $product_quantity, $cart_item_key );
Вам не нужно переопределять шаблон cart.php
. Вы можете просто фильтровать строку количества из функции function.php вашей темы.
Кроме того, атрибут – это просто таксономия с pa_
добавленным к slug, поэтому вы можете использовать на нем основные функции WordPress. Например: атрибут «color» – это просто таксономия «pa_color», и вы можете проверить наличие термина в должности (продукт – это просто сообщение определенного типа) с использованием has_term()
Непроверенный, но я думаю, что это должно работать:
add_filter( 'woocommerce_cart_item_quantity', 'so_30926084_cart_item_quantity', 10, 2 ); function so_30926084_cart_item_quantity( $product_quantity, $cart_item_key ){ $cart_item = WC()->cart->cart_contents[ $cart_item_key ]; if( has_term( 'blue', 'pa_color', $cart_item['data'] ) ){ $product_quantity = ''; } return $product_quantity; }
Предполагая, что ваш атрибут называется Color и предполагается, что это таксономия (поскольку я обнаруживаю, что это уже не всегда так), вы можете использовать следующее (обязательно удалите вышеприведенное), чтобы удалить количество из любого варианта с цветом атрибут.
add_filter( 'woocommerce_cart_item_quantity', 'so_30926084_cart_item_quantity', 10, 2 ); function so_30926084_cart_item_quantity( $product_quantity, $cart_item_key ){ $cart_item = WC()->cart->cart_contents[ $cart_item_key ]; if( $cart_item['data']->is_type( 'variation' ) ){ $attributes = $cart_item['data']->get_attributes(); // var_dump( $attributes ); if( array_key_exists( 'pa_color', $attributes ) ){ $product_quantity = ''; } } return $product_quantity; }
Если это неправильный ключ массива, вы можете раскомментировать var_dump()
чтобы изучить атрибуты $ (поместите вариацию в корзину и перейдите на страницу корзины) и определите правильную информацию ключа массива.