@Smirator

Как связать поле ACF с Filter Everything.PRO?

Приветствую всех!
Я хочу сделать фильтрацию через плагин Filter Everything.PRO своего поля ACF.

Подробно:
У меня есть поле ACF, которое находится во вложенности у других полей. Не уверен, нужно ли учитывать вложенность, но для подробности опишу. Схема:
1. group_64806835d0db2 - группа полей.
2. address_information - повторитель.
3. addresses - группа полей.
4. underground_stations - повторитель.
5. underground_station - нужное поле, объект записи.

1. Я иду в плагин FilterEverything.Pro. И задаю фильтр по кастомному полю, указывая ключ: underground_station.
Тут сразу вопрос. Правильно ли указывать ключ в таком формате? В документации не нашел этого момента, также не нашел и момента с учетом большой вложенности, влияет это на что-то или нет.

2. Добавляю код в файл функций, который указан в документации и указываю свой ключ:
add_filter('wpc_filter_post_meta_term_name', 'wpc_acf_labels_instead_of_values', 20, 2);

function wpc_acf_labels_instead_of_values($term_name, $meta_key) {
    // Указываем ключи мета-полей, для которых нужно заменить значения на метки
    $meta_keys = array('underground_station'); // Добавляем сюда ваше поле ACF

    // Проверяем, нужно ли применять логику для данного мета-поля
    if (in_array($meta_key, $meta_keys)) {
        // Проверяем, доступна ли функция ACF
        if (function_exists('acf_get_field')) {
            // Получаем данные поля ACF
            $field = acf_get_field($meta_key);

            if ($field) {
                // Получаем ключ поля
                $field_key = $field['key'];

                // Проверяем, есть ли у поля ACF выборы (choices)
                $new_choices = [];
                if (isset($field['choices']) && !empty($field['choices'])) {
                    foreach ($field['choices'] as $key => $value) {
                        // Приводим ключи к нижнему регистру для корректного сравнения
                        $new_key = mb_strtolower($key);
                        $new_choices[$new_key] = $value;
                    }

                    // Приводим название термина к нижнему регистру
                    $term_name_test = mb_strtolower($term_name);

                    // Если значение соответствует одному из выборов, заменяем его меткой
                    if (isset($new_choices[$term_name_test])) {
                        $term_name = $new_choices[$term_name_test];
                    }
                }
            }
        }
    }

    return $term_name;
}


3. Ожидаю увидеть на странице, где вывожу фильтры свое поле, но его там нет.

4. Отсекая свои глупые ошибки:
1) плагин подключен, все работает. Фильтрация по другому полю проходит (не acf);
2) мета-ключ я передаю такой же, как указан при регистрации поля;
3) попытка добавить по алгоритму выше любое другое поле из асф: сделать поле тестовое, вписать в функцию, добавить фильтр.
  • Вопрос задан
  • 35 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы