2017-02-14 4 views
0

Я хочу получить product_id для товара в корзине, а затем повторить его в классе (обычай id), поэтому я могу отдельно стилизовать элементы.Код товара

У меня есть это:

<?php 
    foreach(WC()->cart->get_cart() as $cart_item){ 
     $product_id = $cart_item['product_id']; 
     break; 
    } 
    $product_id = apply_filters('woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key); 
?> 

<li id="mcitem-<?php echo esc_attr($cart_item_key); ?>" class="custom-<?php echo $product_id'; ?>"> 

Эта часть уже была в мини-cart.php шаблон, и так было li, но без атрибута класса, который я добавил.

$product_id = apply_filters('woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key); 

Я пытался echo $product_id по-разному внутри класса:

echo '$product_id'; 
echo esc_attr($product_id); 

Испытано как и не работали. Тогда я нашел этот фрагмент кода:

foreach(WC()->cart->get_cart() as $cart_item){ 
    $product_id = $cart_item['product_id']; 
    break; 
} 

(также испытанный без перерыва, так что он был протестирован внутри и снаружи контура)

Затем я повторил два эхо-сигналов, но все-таки результат пустой эхо (никто).

Что я здесь делаю неправильно?

+0

вы можете сбросить туалет() -> cart-> get_cart() и $ cart_item [ 'product_id'] (и, если таковые, кажется хорошо, то также dump $ product_id afer вызывает функцию apply_filters – flynorc

+0

@flynorc - вы говорите о var_dump() правильно? Как бы я это сделал? Мои навыки php очень слабы. –

+0

вы бы добавили var_dump (WC() -> cart-> get_cart ()), перед циклом foreach и вы должны добавить var_dump ($ cart_item ['product_id']), внутри цикла foreach – flynorc

ответ

0

Если вы хотите добавить класс в строку корзины, вы можете фильтровать woocommerce_cart_item_class.

/** 
* Changes the tr class of cart items. 
* 
* @param string $class 
* @param array $values 
* @param string $values_key 
* @return string 
*/ 
function so_42237701_cart_item_class($class, $values, $values_key) { 

    if (isset($values[ 'product_id' ])) { 
     $class .= ' custom-' . $values[ 'product_id' ]; 
    } 

    return $class; 
} 
add_filter('woocommerce_cart_item_class', 'so_42237701_cart_item_class', 10, 3); 

И для мини-корзина

/** 
* Changes the tr class of items in the mini-cart. 
* 
* @param string $class 
* @param array $values 
* @param string $values_key 
* @return string 
*/ 
function so_42237701_mini_cart_item_class($class, $cart_item, $cart_item_key) { 

    if (isset($cart_item[ 'product_id' ])) { 
     $class .= ' custom-' . $cart_item[ 'product_id' ]; 
    } 

    return $class; 
} 
add_filter('woocommerce_mini_cart_item_class', 'so_42237701_mini_cart_item_class', 10, 3); 
+0

он находится на мини-тележке, выпадающем из меню, а не самой тележкой, но это по-прежнему полезно, поскольку мне может понадобиться это для тележки позже. Благодарю. Знаете ли вы об исправлении для мини-тележки? –

+0

Извините, я неправильно понял ваш вопрос. Похоже, что мини-тележка имеет аналогичный фильтр, называемый ['woocommerce_mini_cart_item_class'] (https://github.com/woocommerce/woocommerce/blob/b81e56b597b44b920af0e90095baea655dcd2394/templates/cart/mini-cart.php#L46). Я отредактирую, но это должно быть почти то же самое. – helgatheviking

+0

Не работает. Не применяется ни один класс. Weird. –