Проблема в том, что после того, как запрос AJAX успешно возвращает условия, первый вариант в раскрывающихся списках ингредиентов постоянно отображается как «неопределенный», даже если под ним корректно добавляются действительные условия. Это предполагает молчаливый вывод или неверные данные, отправленные с сервера.
Как видно на снимке экрана ниже.

Выборы, которые интересуют, — это «2» и «3»
Ожидаемое поведение
В раскрывающемся списке ингредиентов должен отображаться локальный заполнитель (например, «Выбрать основной ингредиент»), за которым следует список допустимых терминов. Он не должен содержать слово "неопределено".
Сведения о диагностике
Я уже реализовал очистку на стороне клиента и пробовал фильтровать в PHP, но проблема не устранена.
- Внешний JavaScript (приемник)
JavaScript прослушивает событие изменения и обновляет раскрывающийся список, добавляя локальный заполнитель:
Код: Выделить всё
// --- In vv-quiz-dynamic.js (AJAX Success Block) ---
success: function(response) {
// We are seeing 'undefined' here, even though we filter the response.
let $options = $('').html(response).find('option');
// [CRITICAL SECTION: The filter is failing to remove the bad index]
$options = $options.filter(function() {
const text = $(this).text().trim();
const value = $(this).val();
// This fails to catch the malformed option that leads to 'undefined'.
return value !== '' && text.toLowerCase() !== 'undefined';
});
// Insertion logic:
allIngredientSelects.forEach(function(select) {
const placeholderText = // ... (retrieves local placeholder) ...
// This is where 'undefined' is visually inserted, either from the response
// or a default state before insertion.
select.html('' + placeholderText + '' + $options.map(function() {
return this.outerHTML;
}).get().join(''));
select.prop('disabled', false);
});
},
- Бэкэнд PHP (источник выходных данных)
Обработчик PHP AJAX (vv_ajax_filter_ingredients) извлекает связанные термины и выводит необработанные параметры HTML:
Код: Выделить всё
// --- In vv_ajax_filter_ingredients() (class-vv-core.php) ---
// ... (Logic to get $product_ids and $terms remains the same) ...
// RENDER HTML OPTIONS
if ( ! is_wp_error( $terms ) && is_array( $terms ) ) {
foreach ( $terms as $term ) {
// We ensure we only print valid objects:
if ( $term instanceof WP_Term && ! empty( $term->slug ) && ! empty( $term->name ) ) {
$options_html .= '' . esc_html( $term->name ) . '';
}
}
}
// The function ends with a clean echo and wp_die():
echo $options_html;
wp_die();
Вы также можете найти полный код -> https://github.com/LittleDTLe/VapeProdu ... xfiltering
Подробнее здесь: https://stackoverflow.com/questions/798 ... after-ajax
Мобильная версия