Заполните выпадающий список с помощью файла JSON

Вопрос или проблема

У меня проблема с заполнением выпадающего списка из файла 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>';

ВЫВОД НА ФРОНТ-ЭНДЕ

Скриншот с 2017-01-20 19:21:17.png

ВОПРОС

Как мне вывести страны из файла 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>';

Пояснения к изменениям

  1. Использование file_get_contents: Мы заменили вызов wp_remote_get на file_get_contents, что позволяет избежать дополнительных сетевых запросов, если JSON файл уже находится на сервере. Это упростит и ускорит процесс загрузки данных.

  2. Ассоциативный массив: С параметром true в функции json_decode, мы получаем ассоциативный массив, что упрощает доступ к элементам данных (например, к имени страны через $data['name']).

  3. Корректная генерация HTML: Мы прописали правильные конструкции для формирования <option> в выпадающем списке. Также использованы функции esc_attr() и esc_html(), что важно для обеспечения безопасного вывода данных (защита от XSS-атак).

Итог

Теперь ваш выпадающий список будет правильно заполняться названиями стран, загруженными из JSON-файла. После изменения кода не забудьте протестировать его на сайте, чтобы убедиться, что все работает корректно.

Это решение не только устранит вашу проблему, но и улучшит структуру и безопасность вашего плагина, что всегда должно быть в приоритете при разработке программного обеспечения. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...