Как создать фильтр товаров Woocommerce по кастомному полю в админке WordPress?
Нужно как-то реализовать фильтр в админке по кастомному полю.
Небольшое предисловие: это сайт агентства недвижимости и там у них есть выбор агента, который занимается этим объявлением. Я сделал кастомные страницы, привязал полю и сделал там выбор. Всё присваивается и отлично работает в фронтенде.
Однако, нужно сделать столбец в списке объявлений (Товаров Вукоммерс), которые еще могут фильртоваться, чтобы увидеть, сколько объявлений на определенном агенте. Как это сделать? Подойдет вариант и через код и через плагин.
Дополнительно:
Однако, нужно сделать столбец в списке объявлений (Товаров Вукоммерс), которые еще могут фильртоваться, чтобы увидеть, сколько объявлений на определенном агенте.
Покажите Ваши попытки.
Шаг 1: Добавление кастомного поля к товарам в WooCommerce
Откройте вашу админ-панель WordPress.
Перейдите в раздел "Товары" (Products) и выберите товар, к которому вы хотите добавить кастомное поле, или создайте новый товар.
В редакторе товара прокрутите вниз до раздела "Произвольные поля" (Custom Fields).
Введите название поля в поле "Имя" (Name), например, "Мой кастомный фильтр".
Введите значение поля в поле "Значение" (Value), например, "Значение фильтра".
Нажмите кнопку "Добавить настраиваемое поле" (Add Custom Field).
Теперь у товара есть кастомное поле "Мой кастомный фильтр" с значением "Значение фильтра".
Шаг 2: Создание фильтра по кастомному полю
Установите и активируйте плагин "WooCommerce Product Filter" (или другой аналогичный плагин, если вы предпочитаете другой).
Перейдите в раздел "WooCommerce" в админ-панели WordPress и выберите "Product Filter".
Нажмите на "Add New Filter" для создания нового фильтра.
В настройках фильтра укажите следующие параметры:
Название фильтра: Например, "Фильтр по моему кастомному полю".
Тип фильтра: Выберите тип фильтра, который соответствует вашему кастомному полю (например, текстовое поле, выпадающий список и т. д.).
Для поля "Имя поля" укажите название кастомного поля, которое вы создали в шаге 1 ("Мой кастомный фильтр").
Остальные настройки фильтра можно настроить в соответствии с вашими потребностями.
Нажмите "Сохранить" (Save), чтобы сохранить фильтр.
Теперь у вас есть фильтр товаров в админке WooCommerce, который использует кастомное поле "Мой кастомный фильтр" для фильтрации товаров.
Там только для фронтенда(
Вот как примерно это будет выглядеть. Вам нужно только адаптировать под свой проект.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Фильтр товаров WooCommerce в админке по кастомному полю делается двумя частями: сначала добавляется выпадающий список над таблицей товаров, затем изменяется запрос списка товаров через
pre_get_posts. Если агент хранится в meta field товара, фильтровать нужно поmeta_query.Пример для поля
agent_id:add_action('restrict_manage_posts', function () { global $typenow; if ($typenow !== 'product') { return; } $current = sanitize_text_field($_GET['agent_id'] ?? ''); echo '<select name="agent_id">'; echo '<option value="">Все агенты</option>'; $agents = get_posts([ 'post_type' => 'agent', 'posts_per_page' => -1, 'post_status' => 'publish', ]); foreach ($agents as $agent) { printf( '<option value="%s" %s>%s</option>', esc_attr($agent->ID), selected($current, $agent->ID, false), esc_html($agent->post_title) ); } echo '</select>'; });
add_action('pre_get_posts', function ($query) { if (!is_admin() || !$query->is_main_query()) { return; } if ($query->get('post_type') !== 'product') { return; } $agent_id = absint($_GET['agent_id'] ?? 0); if ($agent_id) { $query->set('meta_query', [[ 'key' => 'agent_id', 'value' => $agent_id, ]]); } });
Отдельно можно добавить колонку с агентом через фильтры
manage_product_posts_columnsиmanage_product_posts_custom_column. Если поле создано через ACF, используйте тот же meta key, который хранит ACF. Для relationship/post object чаще всего в meta лежит ID связанной записи.Если агент хранится не как ID, а как строка имени, фильтр всё равно работает, но
valueдолжен совпадать с сохранённым значением. Для ACF Post Object чаще всего хранится ID, для Select может храниться value, для Relationship — массив сериализованных ID. В последнем случае простой meta_query по=не сработает, нуженLIKEпо сериализованному значению, но это менее эффективно.Для больших каталогов недвижимости лучше хранить отдельное простое meta-поле
agent_idс числом. Тогда фильтр будет быстрым и понятным. После добавления фильтра проверьте, что он не применяется к обычным записям, заказам и другим post types в админке.