Привіт! Іноді виникає потреба швидко отримати список усіх сторінок, постів чи будь-яких інших 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 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.
Ось так, без зайвих плагінів, ми отримали потужний інструмент для експорту даних. Сподіваюся, цей код стане вам у пригоді!
Виникли питання чи є ідеї для покращення? Пишіть у коментарях!

