Как прочитать файл JSON и получить доступ к его свойствам?

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

Я пытаюсь прочитать JSON-файл, который был успешно экспортирован с помощью wp_send_json_success, однако я не могу перебрать массив в файле, так как, похоже, не могу получить доступ к $menu->terms. Что я упускаю?

$json_content = file_get_contents( ABSPATH . '/menu.json', true );
$menus = json_decode( $json_content );

if ( ! empty( $menus ) ) {
        foreach ( $menus as $menu ) {
            // Получаем внутреннее меню по слагу.
            $internal_menu = get_term_by( 'slug', 'primary', 'nav_menu' );

            // Проверяем, существует ли меню с указанным именем.
            $menu_exists = wp_get_nav_menu_object( 'Primary' );

            if ( $menu_exists ) {
                // Если меню существует, удаляем его.
                wp_delete_nav_menu( 'Primary' );
            }

            // Создаем новое меню с тем же именем.
            $menu_id = wp_create_nav_menu( 'Primary' );

            // Строим аргументы для новых пунктов меню.
            $args  = array();
            $index = 0;
           
            if ( ! empty( $menu->terms ) ) {
                foreach ( $menu->terms as $menu_item ) {

                    // Пропускаем, если статус поста - 'draft'.
                    if ( 'draft' === $menu_item->post_status ) {
                        continue;
                    }

                    // Обрабатываем элемент меню в зависимости от его типа.
                    $args_menu_item = process_menu_item( $menu_item );

                    // Обновляем пункт навигационного меню и получаем обновленный ID.
                    $nav_menu_item_update = wp_update_nav_menu_item( $menu_id, 0, $args_menu_item );

                    // Обновляем ID объекта в аргументах.
                    $args_menu_item['menu-item-object-id'] = $nav_menu_item_update;

                    $args[ $index++ ] = $args_menu_item;
                }
            }

            // Обновляем родительский ID для пунктов меню.
            update_parent_id( $menu_id, $args );

        }
    }
}

Ответ или решение

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

Шаги для чтения JSON-файла и получения доступа к его свойствам

  1. Чтение файла: Используйте file_get_contents(), чтобы загрузить содержимое вашего JSON-файла. Убедитесь, что путь к файлу задан правильно.

  2. Декодирование JSON: После чтения файла используйте json_decode(), чтобы преобразовать JSON-строку в объект PHP или ассоциативный массив. Стоит отметить, что если вы хотите получить ассоциативный массив, добавьте второй аргумент true к функции json_decode().

  3. Проверка и перебор данных: Перед тем как получить доступ к свойству, проверьте, не является ли результат пустым. Если у вас есть массив объектов, убедитесь, что вы перебираете их правильно.

Пример кода

Вот ваш код с некоторыми улучшениями и исправлениями:

$json_content = file_get_contents( ABSPATH . '/menu.json' );
$menus = json_decode( $json_content );

if ( ! empty( $menus ) && is_array( $menus ) ) {
    foreach ( $menus as $menu ) {
        // Получение внутреннего меню по слагу.
        $internal_menu = get_term_by( 'slug', 'primary', 'nav_menu' );

        // Проверка существует ли меню с указанным именем.
        $menu_exists = wp_get_nav_menu_object( 'Primary' );

        if ( $menu_exists ) {
            // Если меню существует, удаляем его.
            wp_delete_nav_menu( 'Primary' );
        }

        // Создаем новое меню с таким же именем.
        $menu_id = wp_create_nav_menu( 'Primary' );

        // Массив аргументов для новых элементов меню.
        $args  = array();
        $index = 0;

        // Проверка наличия свойств в объекте меню
        if ( ! empty( $menu->terms ) && is_array( $menu->terms ) ) {
            foreach ( $menu->terms as $menu_item ) {

                // Пропускаем элементы со статусом 'draft'.
                if ( 'draft' === $menu_item->post_status ) {
                    continue;
                }

                // Обработка элемента меню
                $args_menu_item = process_menu_item( $menu_item );

                // Обновление элемента навигационного меню и получение обновленного ID.
                $nav_menu_item_update = wp_update_nav_menu_item( $menu_id, 0, $args_menu_item );

                // Обновление ID объекта в аргументах.
                $args_menu_item['menu-item-object-id'] = $nav_menu_item_update;

                $args[ $index++ ] = $args_menu_item;
            }
        }

        // Обновление родительских ID для элементов меню.
        update_parent_id( $menu_id, $args );
    }
}

Замечания

  1. Проверка массива: Убедитесь, что перед циклом foreach вы проверяете, является ли $menus массивом, чтобы избежать возможных ошибок.

  2. Правильный доступ к свойству: В вашем коде вы использовали >, что является HTML-энтитетом для символа >. Вам нужно использовать -> для доступа к свойствам объекта.

  3. Файлы и пути: Убедитесь, что путь к вашему JSON-файлу правильный (в вашем случае ABSPATH . '/menu.json').

Следуя этим рекомендациям и исправлениям, вы сможете успешно читать ваш JSON-файл и получать доступ к его свойствам. Если возникнут дополнительные проблемы, обратите внимание на ошибки, которые могут возникнуть, или проверьте структуру вашего JSON-файла для уверенности, что она соответствует ожидаемым значениям в коде.

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

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