Привіт! Іноді виникає потреба швидко отримати список усіх сторінок, постів чи будь-яких інших post_type з вашого сайту WordPress у вигляді зручної таблиці, наприклад, для аналізу, передачі даних замовнику або для міграції.
Стандартні засоби експорту WordPress створюють громіздкий XML-файл, який не завжди зручно використовувати. Плагіни? Вони можуть навантажувати систему. Сьогодні я покажу, як додати всього одну функцію у файл functions.php вашої теми, щоб отримати елегантний експорт у CSV-файл.
Крок 1: Розуміємо, що робить код
Ми напишемо функцію, яка буде “слухати” спеціальний запит в URL. Наприклад, коли ви заходите за адресою https://vashsite.com/?export_data=all_posts, наш код перехопить цей запит і замість завантаження сайту згенерує та віддасть вам CSV-файл з потрібними даними.
Це безпечно, оскільки спрацьовує лише за наявності конкретного параметра в URL, який знаєте тільки ви.
Крок 2: Додаємо код у functions.php
Відкрийте файл functions.php вашої активної теми (найкраще – дочірньої теми, щоб не втратити зміни після оновлення). Додайте в кінець файлу наступний PHP-код:
PHP
add_action('init', 'export_all_posts_and_pages_to_csv');
function export_all_posts_and_pages_to_csv() {
// Перевіряємо, чи є наш параметр в URL і чи має користувач права адміністратора
if (isset($_GET['export_data']) && current_user_can('manage_options')) {
$post_type_to_export = $_GET['export_data'];
// Масив дозволених типів постів для експорту
$allowed_post_types = ['post', 'page']; // Можна додати свої, наприклад, 'product' для WooCommerce
if (in_array($post_type_to_export, $allowed_post_types)) {
$args = [
'post_type' => $post_type_to_export,
'post_status' => 'publish',
'posts_per_page' => -1, // Вивантажуємо абсолютно всі
];
$query = new WP_Query($args);
if ($query->have_posts()) {
$filename = 'export_' . $post_type_to_export . '_' . date('Y-m-d') . '.csv';
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=' . $filename);
$output = fopen('php://output', 'w');
// Встановлюємо BOM для коректного відображення кирилиці в Excel
fputs($output, "\xEF\xBB\xBF");
// Заголовки для нашої CSV таблиці
fputcsv($output, ['ID', 'Title', 'URL', 'Post Type', 'Date']);
while ($query->have_posts()) {
$query->the_post();
$post_id = get_the_ID();
$row = [
$post_id,
get_the_title(),
get_permalink(),
get_post_type(),
get_the_date(),
];
fputcsv($output, $row);
}
fclose($output);
wp_reset_postdata();
exit();
}
}
}
}
Крок 3: Як це працює і як користуватися
- Збережіть файл functions.php.
- Переконайтеся, що ви залогінені на сайті як адміністратор. Це важливо, оскільки код містить перевірку
current_user_can('manage_options')для безпеки. - Тепер відкрийте у браузері наступні URL-адреси, щоб завантажити файли:
- Для експорту всіх постів (записів): https://vashsite.com/?export_data=post
- Для експорту всіх сторінок: https://vashsite.com/?export_data=page
Браузер автоматично почне завантаження файлу export_post_РІК-МІСЯЦЬ-ДЕНЬ.csv або export_page_РІК-МІСЯЦЬ-ДЕНЬ.csv.
Що можна покращити?
- Додати свої типи постів: Якщо у вас є, наприклад, WooCommerce, ви можете додати ‘product’ до масиву
$allowed_post_types, щоб експортувати товари. - Додати більше полів: Ви можете легко модифікувати код, щоб додати в CSV-файл ID автора, категорії, теги або значення кастомних полів. Наприклад, для додавання автора потрібно додати ‘Author’ у масив заголовків і get_the_author_meta(‘display_name’, get_post_field(‘post_author’, $post_id)) у масив $row.
Ось так, без зайвих плагінів, ми отримали потужний інструмент для експорту даних. Сподіваюся, цей код стане вам у пригоді!
Виникли питання чи є ідеї для покращення? Пишіть у коментарях!

