Вопрос или проблема
У меня проблема с заполнением выпадающего списка из файла JSON
.
Я модифицирую существующий плагин, и хочу включить страны, которые мы хотим видеть.
ФАЙЛ JSON
{
"AX": {
"name": "Åland Islands",
"lpa": "18",
"affirm_non_muslim": false
},
"AF": {
"name": "Афганистан",
"lpa": "0",
"affirm_non_muslim": false
},
"AL": {
"name": "Албания",
"lpa": "18",
"affirm_non_muslim": false
},
"DZ": {
"name": "Алжир",
"lpa": "18",
"affirm_non_muslim": false
}
}
МОЙ ФАЙЛ ФУНКЦИЙ
function av_get_json_data(){
$json_url = require( plugin_dir_path( __FILE__ ) . '../includes/data/country_age.json' );
$args = array('timeout' => 120);
$json_feed = wp_remote_get( $json_url, $args );
$json_string_in_array = array('$json_feed');
$json_array = json_decode($json_string_in_array[0]);
//$actual_feed = json_decode($json_array);
return $json_array;
}
Вот форма вывода
$form .= '</select> <select name="av_verify_l" id="av_verify_l">';
foreach (av_get_json_data() as $data) :
$form .= '<option value="" >' . $data . '</option>';
endforeach;
$form .='<select>';
ВЫВОД НА ФРОНТ-ЭНДЕ
ВОПРОС
Как мне вывести страны из файла JSON в выпадающем списке
Измените форму вывода на
$form .= '<option value="" >' . $data['name'] . '</option>';
.
Ответ или решение
Для решения задачи по заполнению выпадающего списка (select dropdown) данными из файла JSON, необходимо внести изменения в код вашего плагина. Давайте разберем шаги по реализации данной функциональности более подробно.
Шаг 1: Получение данных из JSON-файла
Ваш текущий код функции av_get_json_data
уже загружает данные из JSON-файла, однако есть несколько моментов, на которые стоит обратить внимание для исправления и улучшения.
Вот обновленная версия функции:
function av_get_json_data() {
$json_url = plugin_dir_path(__FILE__) . '../includes/data/country_age.json';
// Загружаем содержимое файла
$json_content = file_get_contents($json_url);
// Декодируем JSON
$json_array = json_decode($json_content, true); // используем true для получения ассоциативного массива
return $json_array;
}
Шаг 2: Заполнение выпадающего списка
Теперь, когда функция корректно возвращает ассоциативный массив с данными, вам нужно правильно организовать вывод данных в HTML-коде. Ваша цель — отобразить названия стран в выпадающем списке.
Внесите следующие изменения в код вывода формы:
$form .= '<select name="av_verify_l" id="av_verify_l">';
foreach (av_get_json_data() as $code => $data) :
$form .= '<option value="' . esc_attr($code) . '">' . esc_html($data['name']) . '</option>';
endforeach;
$form .= '</select>';
Пояснения к изменениям
-
Использование
file_get_contents
: Мы заменили вызовwp_remote_get
наfile_get_contents
, что позволяет избежать дополнительных сетевых запросов, если JSON файл уже находится на сервере. Это упростит и ускорит процесс загрузки данных. -
Ассоциативный массив: С параметром
true
в функцииjson_decode
, мы получаем ассоциативный массив, что упрощает доступ к элементам данных (например, к имени страны через$data['name']
). -
Корректная генерация HTML: Мы прописали правильные конструкции для формирования
<option>
в выпадающем списке. Также использованы функцииesc_attr()
иesc_html()
, что важно для обеспечения безопасного вывода данных (защита от XSS-атак).
Итог
Теперь ваш выпадающий список будет правильно заполняться названиями стран, загруженными из JSON-файла. После изменения кода не забудьте протестировать его на сайте, чтобы убедиться, что все работает корректно.
Это решение не только устранит вашу проблему, но и улучшит структуру и безопасность вашего плагина, что всегда должно быть в приоритете при разработке программного обеспечения. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться!