Привіт! Іноді виникає потреба швидко отримати список усіх сторінок, постів чи будь-яких інших 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: Як це працює і як користуватися

  1. Збережіть файл functions.php.
  2. Переконайтеся, що ви залогінені на сайті як адміністратор. Це важливо, оскільки код містить перевірку current_user_can('manage_options') для безпеки.
  3. Тепер відкрийте у браузері наступні 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.

Ось так, без зайвих плагінів, ми отримали потужний інструмент для експорту даних. Сподіваюся, цей код стане вам у пригоді!

Виникли питання чи є ідеї для покращення? Пишіть у коментарях!