Я чувствую, что это не должно быть так сложно, но в то же время, если я не смогу сделать это с моими 5-минутными знаниями PHP, это может быть не так просто, как я ожидаю.
Я создал следующий PHP-код в файле functions.php для своего магазина WooCommerce:
add_filter('woocommerce_add_to_cart_fragments', 'new_cart_count_fragments', 10, 1);
function new_cart_count_fragments($fragments) {
if ( WC()->cart->get_cart_contents_count() < 1) {
$fragments['.cart-count-cat'] = '<span class = "count-text">Custom message 1</span>';
} elseif ( WC()->cart->get_cart_contents_count() == 1 ) {
$fragments['.cart-count-cat'] = '<span class = "count-text">Custom message 2</span>';
} else {
$fragments['.cart-count-cat'] = '<span class = "count-text">Custom message 3</span>';
}
return $fragments;
}
Код делает то, что должен делать. Он не сломан, но я хотел бы изменить его, но не могу понять, как это сделать.
На данный момент он ищет количество корзин, и если оно меньше 1, добавляет некоторый текст в один из моих классов CSS. Если у меня ровно 1, отображается второе сообщение, а если в моей корзине более 1 продукта, отображается последнее сообщение. Все это делается динамически благодаря фрагментам.
Теперь вот то, что я пытался выяснить в течение нескольких часов.
Вместо того, чтобы искать общее количество продуктов в моей корзине, я хотел бы указать категорию продуктов, и код должен смотреть, сколько продуктов у меня есть в моей корзине только из этой конкретной категории.
Итак, допустим, у меня есть категории «х» и «у».
Если у меня есть 1 продукт с категорией «x» в корзине и другой продукт с категорией «y», а код учитывает только категорию «x», он должен отображать «Пользовательское сообщение 2».
Я надеюсь, что это имеет смысл и на самом деле не так сложно. Любая помощь очень ценится 🙏
попробуйте этот, я тоже только что нашел эту надежду, что она еще не устарела.
add_filter('woocommerce_add_to_cart_fragments', 'new_cart_count_fragments', 10, 1);
function new_cart_count_fragments($fragments) {
$product_counter = 0;
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$product = $cart_item['data'];
// replace 'x' with your category's slug
if ( has_term( 'x', 'product_cat', $product->id ) ) {
$product_counter++;
}
}
if ( $product_counter < 1) {
$fragments['.cart-count-cat'] = '<span class = "count-text">Custom message 1</span>';
} elseif ( $product_counter == 1 ) {
$fragments['.cart-count-cat'] = '<span class = "count-text">Custom message 2</span>';
} else {
$fragments['.cart-count-cat'] = '<span class = "count-text">Custom message 3</span>';
}
return $fragments;
}