Як сховати відсутні товари в Woocommerce шорткодах та схожих товарах
Буквально сьогодні вирішував задачі, озвучені в заголовку статті, тому спішу поділитись з вам цим досвідом. Даний пост буде корисним доповненням до недавнього огляду модуля WHWS Display In Stock Products First який автоматично виводить всі відсутні товари в кінці глобального каталогу магазину. Але, на жаль, він не спрацьовує для шорткодів та списку схожих продуктів (Related Products). Тому потрібні додаткові сніпети.
Також на початку посту хочу залишити лінк на глобальний пост про наявність товарів в Woocommerce (опцію is_in_stock і т.п.), де зібрана різна інформація по темі, є приклади коду та трохи корисних посилань. Можливо пізніше я його перепишу, але поки не це немає часу.
Прибираємо товари з шорткодів Woocommerce (woocommerce_shortcode_products_query)
Для цієї задачі будемо юзати фільтр woocommerce_shortcode_products_query, який дозволяє задати спеціальні параметри вибірки (query запросу). Код додаєм до файлу функцій functions.php в вашому шаблоні.
add_filter( 'woocommerce_shortcode_products_query', function( $query_args, $atts, $loop_name ){ if ( ( $loop_name == 'products' ) OR (( $loop_name == 'sale_products' ))){ $query_args['meta_query'] = array( array( 'key' => '_stock_status', 'value' => 'outofstock', 'compare' => 'NOT LIKE', ) ); } return $query_args; }, 10, 3); |
Важливо! Тут в коді є параметр $loop_name, який означає назву Woocommerce шорткода, з яким ми працюємо. Як бачите я одночасно змінюю вибірку для загального шорткода продуктів [products] та товарів з розпродажу [sale_products]. В вашому магазині можуть буті і інші варіанти – враховуйте це. Якщо вам не потрібна така умова – просто приберіть блок IF з коду.
Момент2. Також в параметрах ви можете бачити використання meta_query де для ключа _stock_status виконується порівняння зі значенням «outofstock». Теоретично, тут можна трохи підправити логіку роботи щоб перевіряти наявність (instock) з параметром compare = IN (але я не пробував). Навіщо це треба? В ході тестування мені поки не попадались товари «під замовлення» (backorder products), тому є вірогідність, що код їх також відсіює. Цей момент треба тестити/дороблювати, якщо перед вами стоїть така задача.
Бонус. На просторах інтернету знайшов дещо схожий приклад коду який дозволить не просто прибрати відсутні товари, а видалити з відображення шоркодів небажану категорію. Для цього знов ж таки використовуємо фільтр woocommerce_shortcode_products_query але з іншими параметрами:
add_filter( 'woocommerce_shortcode_products_query', 'bbloomer_exclude_cat_shortcodes' ); function bbloomer_exclude_cat_shortcodes( $query_args ){ $query_args['tax_query'][] = array( array( 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => array( 'black' ), // Don't display products from this category 'operator' => 'NOT IN' )); return $query_args; } |
Я так розумію, що по схожій логіці в фільтр можна додавати обмеження по іншим опціям: даті, тегам і т.п.
Як прибрати відсутні товари зі схожих продуктів Woocommerce
Я пробував досить багато різних сніпетів, але вони не спрацьовували. Допоміг варіант коду з цієї статті. Додаєте його в файл функцій functions.
add_filter( 'woocommerce_related_products', 'exclude_oos_related_products', 10, 3 ); function exclude_oos_related_products( $related_posts, $product_id, $args ){ $out_of_stock_product_ids = (array) wc_get_products( array( 'status' => 'publish', 'limit' => -1, 'stock_status' => 'outofstock', 'return' => 'ids', ) ); $exclude_ids = $out_of_stock_product_ids; return array_diff( $related_posts, $exclude_ids ); } |
Нюанси. Єдиним мінусом цього рішення є те, що код не заміняє товари не в наявності на інші, а просто видаляє його з «фінальної видачі», тому в одному випадку у вас може відображатися 3 товара, в іншому – 2, 4 і т.п.
В шаблоні, з яким я працюю, є схожа по логіці функція woocommerce_output_related_products_args де навіть задані якісь аргументи. Я бачив в інтернеті приклади як у неї додавали параметр meta_query, але у мене це не працює!
Лише за рахунок сніпету, вказаного вище, мені вдалося вирішити мою задачу. Якщо у вас є інші варіанти рішень – присилайте лінки/інфу в коментах.
Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Як сховати відсутні товари в Woocommerce шорткодах та схожих товарах
- Сервіс AdMaven + плагін для монетизації трафіка на WordPress сайтах
- Плагіни для створення стрічки новин з біжучим рядком в WordPress
- Як змінити розміщення кнопки оформлення замовлення в WooCommerce
- Плагін WHWS Display In Stock Products First – відображення товарів в наявності першими
- Підписка MonsterONE: чи варто використовувати цей сервіс у 2023 році? (+5 продуктів, які треба скачати в першу чергу)
- Онлайн генератор ссылок на мессенджеры для WordPress и не только
- WooCommerce (46)
- Безопасность (12)
- Видео (6)
- Виджеты (28)
- Возможности (141)
- Вопрос-ответ (6)
- Начинающим (52)
- Новости (46)
- Оптимизация (23)
- Плагины (246)
- Сервисы (87)
- Хаки и секреты (87)
- Шаблоны (45)
- Дизайн Мания - о веб-дизайне и не только.
- Tod's Blog - все про заработок онлайн.
- Вебдванольные заметки - обзоры веб-сервисов.
- Советы по выбору холодильника LG с технологией No Frost
- Зачем нужны Wi-Fi ретрансляторы и как выбрать подходящую модель
- Введение в онлайн-казино Slotor777: многообразие игр и привлекательные бонусы
- Необходимость использования облачного хранилища в наше время, что важно и как выгодно?
- Спрощення процесу звітності за допомогою програми BAS Бухгалтерія
- Технологія підключення інтернету GPON та її переваги
- За що гравці найбільше цінують Lineage 2
- Для каких проектов нужна аренда виртуального сервера и что такое VPS