Как связать типы постов «product» (от woocommerce) и «club» (свой кастомный)?
Есть кастомный тип поста club, к нему была создана своя таксономия city.
Также есть продукты с типом записи product от woocommerce.
Нужно в товаре указать клуб, чтобы отнести таким образом товар к клубу (товар может быть отнесён к нескольким клубам). Находил информацию что это можно сделать несколькими способами. Через таксономию, wp option и метаданные.
Вот как выглядит сейчас запрос на вывод товаров в клубе
$args = [ 'post_type' => 'product', 'product_cat' => 'events', ]; $events = new WP_Query ($args); while ($events->have_posts()) : $events->the_post(); global $product; ...
Не знаю как связать лучше эти сущности.
Сейчас код работает, но через "костыль"(причем ненадежный). В woocommerce создал категории, которые назвал именами клубов. И при выводе товара на странице клуба проверяю слаги (слаг категории товара == слаг названия клуба в котором выводится). Если равно то выводим... Все работает, но стоит поменять название клуба - связь теряется.
Заранее спасибо.
Добавьте кастомную таксономию tax_club с помощью функции register_taxonomy. В параметре object_type пишите array('product', 'club'). И у вас будет одна таксономия на 2 типа постов. При выводе товара на странице клуба вы будете продукты фильтровать по одному термину.
Спасибо за комментарий.
Добавил. теперь в дашборде в разделе products и clubs появилась таксономия "in club". И сейчас было бы хорошо сделать так, чтобы термины этих таскономий автоматически создавались и удалялись при создании и удалении клуба. Иначе придется после создания нового клуба дополнительно создавать в таксономии для него терм(и удалять тоже).
Это событие происходит во время сохранения поста https://wp-kama.ru/hook/save_post. Только для post_type club выполнить 2 функции https://wp-kama.ru/function/wp_insert_term и эту https://wp-kama.ru/function/wp_set_post_terms. Ну само собой всякие там проверки сделать. И потом аналогично для события https://wp-kama.ru/hook/before_delete_post
Спасибо за коммент.
Получился такой код, вроде все работает в нем(name и slug у терма копируются у поста(club)). После удаления поста в корзину к слагу терма добаляется _trashed. После удаления основательного с корзины удаляется и сам term.
Но это только автоматическое создание, изменение и удаление этих term.
Теперь осталось сделать правильный запрос для вывода товаров на основе отмеченных разделов.
https://wp-kama.ru/function/wp_get_post_terms На странице клуба получаете массив terms таксономии клубов. Затем создаете новый цикл который дергает продукты и фильтруете его с помощью массива terms который мы получили выше (можете подтянуть темплейт woocommerce content-product.php для отображения единицы продукта). Всю эту радость пихаете в темплейт поста клуба.