Как программно загрузить данные CSV в данные пользовательского типа записи с помощью метабокса

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

У меня есть пользовательский тип записи под названием movies, в котором поддержка записи включает только заголовок и 3 пользовательских поля в metabax: box office, year и director, как показано ниже:

вставьте описание изображения здесь

Теперь у меня есть около 150 строк данных в формате CSV с такой же структурой, как ниже:

name, boxoffice,year,director

Не могли бы вы сообщить мне, как я могу загрузить их в базу данных WP, чтобы сохранить как пользовательский тип записи, так и метаданные в базе данных с использованием PHP?

if(isset($_POST["submit"]))
    {
        $rows = array();
        if($_FILES['file']['name'])
        {
            $filename = explode(".", $_FILES['file']['name']);
            if($filename[1] == 'csv')
            {
                $handle = fopen($_FILES['file']['tmp_name'], "r");   
                $count=0;
                while(($data = fgetcsv($handle, 1000, ",")) !== FALSE)
                {
                     query_posts(array( 
                            'post_type' => 'custom-post-type',
                        ) ); 
                    while(have_posts()) : the_post();
                    $post_id->ID;
                    $rows[] = array(
                        'variable1' =>  $data[1] . "," . $data[2] . "," . $data[3] . "," . $data[4],
//вышеуказанная строка для использования нескольких ячеек CSV файла в одной переменной
                        'variable2'   =>  $data[5],
                        'variable3'  => $data[6],
                        'variable4'                 => $data[7],
                        'variable5'                 => $data[8],
                        'variable6'         => $data[9]
                    );
                endwhile; 
                    $count++;
                }
                foreach($rows as $row => $rowValue  ){
                    add_row('rates', $rowValue, $post_id);  
                }   
                fclose($handle);
            }
        }
    }

.

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

Чтобы загрузить данные из CSV-файла в пользовательский тип записи WordPress, такой как movies, и сохранить их в базе данных вместе с метаданными, вам нужно выполнить несколько шагов. Убедитесь, что вы имеете соответствующие права доступа и резервную копию ваших данных перед выполнением следующих операций. Ниже приведен подробный подход к решению вашей задачи.

Шаг 1: Настройка HTML-формы

Сначала создайте форму для загрузки CSV-файла:

<form method="post" enctype="multipart/form-data">
    <input type="file" name="file" accept=".csv" required>
    <input type="submit" name="submit" value="Загрузить данные">
</form>

Шаг 2: Обработка загрузки файла и чтение CSV-данных

Теперь добавим код, который будет обрабатывать загрузку файла и считывать данные из CSV:

if(isset($_POST["submit"])) {
    if($_FILES['file']['name']) {
        $filename = explode(".", $_FILES['file']['name']);

        if($filename[1] == 'csv') {
            $handle = fopen($_FILES['file']['tmp_name'], "r");   
            $count = 0;

            while(($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                // Пропускаем заголовок
                if ($count == 0) { 
                    $count++;
                    continue; 
                }

                // Создаем новый пост типа movies
                $post_data = array(
                    'post_title'   => sanitize_text_field($data[0]), // имя (название фильма)
                    'post_type'    => 'movies',
                    'post_status'  => 'publish',
                );

                $post_id = wp_insert_post($post_data);

                // Проверяем, были ли успешно вставлены данные
                if(!is_wp_error($post_id)) {
                    // Добавляем метаданные
                    update_post_meta($post_id, 'box_office', sanitize_text_field($data[1])); // кассовые сборы
                    update_post_meta($post_id, 'year', intval($data[2])); // год
                    update_post_meta($post_id, 'director', sanitize_text_field($data[3])); // режиссер
                }
                $count++;
            }
            fclose($handle);
            echo "Данные успешно загружены!";
        } else {
            echo "Ошибка: Пожалуйста, загрузите CSV файл.";
        }
    }
}

Шаг 3: Объяснение кода

  1. Форма загрузки: HTML-форма позволяет пользователю выбрать и загрузить CSV-файл с данными о фильмах.

  2. Проверка файла: В коде PHP проверяется, является ли загружаемый файл CSV и открывается для чтения.

  3. Считывание данных: Используется fgetcsv(), чтобы последовательно считывать строки из файла. Первая строка (заголовки) пропускается.

  4. Создание поста: Для каждой записи создается новый пост типа movies с помощью функции wp_insert_post().

  5. Добавление метаданных: После создания поста добавляются пользовательские поля (метаданные) с использованием update_post_meta(). Данные очищаются и обрабатываются для безопасности, используя функции sanitize_text_field() и intval().

Заключение

Используя приведенный код, вы сможете эффективно загрузить данные о фильмах из CSV-файла в ваш пользовательский тип записи movies. Этот подход не только программный, он также обеспечивает безопасность и защиту данных, что является важным аспектом при работе с внешними источниками данных. Помните, всегда создавайте резервные копии ваших данных, прежде чем выполнять массовые изменения.

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

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