Вопрос или проблема
У меня есть пользовательский тип записи под названием 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: Объяснение кода
-
Форма загрузки: HTML-форма позволяет пользователю выбрать и загрузить CSV-файл с данными о фильмах.
-
Проверка файла: В коде PHP проверяется, является ли загружаемый файл CSV и открывается для чтения.
-
Считывание данных: Используется
fgetcsv()
, чтобы последовательно считывать строки из файла. Первая строка (заголовки) пропускается. -
Создание поста: Для каждой записи создается новый пост типа
movies
с помощью функцииwp_insert_post()
. -
Добавление метаданных: После создания поста добавляются пользовательские поля (метаданные) с использованием
update_post_meta()
. Данные очищаются и обрабатываются для безопасности, используя функцииsanitize_text_field()
иintval()
.
Заключение
Используя приведенный код, вы сможете эффективно загрузить данные о фильмах из CSV-файла в ваш пользовательский тип записи movies
. Этот подход не только программный, он также обеспечивает безопасность и защиту данных, что является важным аспектом при работе с внешними источниками данных. Помните, всегда создавайте резервные копии ваших данных, прежде чем выполнять массовые изменения.