Корисні SQL запити для WordPress

Привіт:) SQL-запити для WordPress можуть стати в пригоді розробнику, адміністратору сайту або SEO-фахівцю, коли стандартних можливостей адміністративної панелі недостатньо.

За допомогою SQL можна швидко знайти та змінити записи, очистити спам-коментарі, працювати з користувачами, перевірити налаштування, знайти непотрібні метаполя, змінити URL сайту, видалити старі дані та виконати багато інших операцій.

Зміст:

У цій статті зібрані практичні SQL-запити для WordPress, які можна використовувати через phpMyAdmin, Adminer, MySQL/MariaDB CLI або WP-CLI.

⚠️ Важливо: SQL-запити UPDATE і DELETE можуть незворотно змінити або видалити дані. Перед виконанням будь-якого небезпечного запиту обов'язково зробіть резервну копію бази даних.

🔧 Що потрібно знати перед роботою з SQL

WordPress зберігає основну інформацію в MySQL або MariaDB. Ядро використовує набір стандартних таблиць для постів, користувачів, коментарів, налаштувань, таксономій та метаданих.

Найчастіше використовуються:

ТаблицяПризначення
wp_postsзаписи, сторінки та custom post types
wp_postmetaметадані записів
wp_usersкористувачі
wp_usermetaметадані користувачів
wp_commentsкоментарі
wp_commentmetaметадані коментарів
wp_optionsналаштування сайту
wp_termsназви категорій і тегів
wp_term_taxonomyінформація про тип таксономії
wp_term_relationshipsзв'язки записів із категоріями та тегами
wp_termmetaметадані категорій і тегів

WordPress підтримує змінний префікс таблиць. Тому wp_ — це лише стандартний приклад.

Наприклад, у конкретному сайті таблиці можуть називатися:

abc_postsabc_optionsabc_users

Тому перед виконанням запитів потрібно перевірити реальний префікс бази даних.

⚠️ Резервна копія перед SQL-запитами

Перед виконанням DELETE, UPDATE або інших операцій, які змінюють дані, зробіть backup.

Якщо використовується WP-CLI, базу можна експортувати командою:

wp db export backup.sql

WP-CLI також дозволяє виконувати SQL-запити через команду wp db query.

Для критичних операцій краще спочатку виконати SELECT і перевірити, які саме записи будуть змінені.

Наприклад, замість:

DELETE FROM wp_comments
WHERE comment_approved = 'spam';

спочатку виконайте:

SELECT *
FROM wp_comments
WHERE comment_approved = 'spam';

Якщо результат правильний — переходьте до DELETE.

👀 Перегляд даних

Переглянути останні записи

SELECT ID, post_title, post_status, post_date
FROM wp_posts
ORDER BY post_date DESC
LIMIT 20;

Переглянути опубліковані записи

SELECT ID, post_title, post_date
FROM wp_posts
WHERE post_status = 'publish'
AND post_type = 'post'
ORDER BY post_date DESC;

Переглянути сторінки

SELECT ID, post_title, post_status
FROM wp_posts
WHERE post_type = 'page'
ORDER BY post_title;

Переглянути користувачів

SELECT ID, user_login, user_email, user_registered
FROM wp_users
ORDER BY ID;

Порахувати кількість записів

SELECT COUNT(*) AS total_posts
FROM wp_posts
WHERE post_type = 'post';

📝 Робота з постами та сторінками

Знайти запис за ID

SELECT *
FROM wp_posts
WHERE ID = 123;

Замість 123 вкажіть ID потрібного запису.

Знайти записи за частиною заголовка

SELECT ID, post_title, post_status
FROM wp_posts
WHERE post_title LIKE '%WordPress%';

Знайти записи за частиною тексту

SELECT ID, post_title
FROM wp_posts
WHERE post_content LIKE '%robots.txt%';

Знайти всі чернетки

SELECT ID, post_title, post_date
FROM wp_posts
WHERE post_status = 'draft'
AND post_type = 'post'
ORDER BY post_date DESC;

Знайти записи в кошику

SELECT ID, post_title, post_date
FROM wp_posts
WHERE post_status = 'trash';

Порахувати чернетки

SELECT COUNT(*) AS drafts
FROM wp_posts
WHERE post_status = 'draft';

Знайти записи без заголовка

SELECT ID, post_status
FROM wp_posts
WHERE post_title = '';

Знайти записи без контенту

SELECT ID, post_title
FROM wp_posts
WHERE post_content = '';

Змінити статус запису

Наприклад, перевести запис із чернетки в опублікований:

UPDATE wp_posts
SET post_status = 'publish'
WHERE ID = 123;

⚠️ Обережно з таким запитом: він змінює статус безпосередньо в базі даних.

🔗 Робота з URL записів

Знайти записи з конкретним URL у контенті

SELECT ID, post_title
FROM wp_posts
WHERE post_content LIKE '%https://example.com/%';

Це може бути корисно під час міграції сайту або зміни домену.

Знайти старий домен

SELECT ID, post_title
FROM wp_posts
WHERE post_content LIKE '%old-domain.com%';

Але пошук лише в wp_posts не гарантує знаходження всіх входжень URL. Дані можуть також зберігатися в wp_options, wp_postmeta, wp_usermeta та інших таблицях.

🧩 Робота з метаданими

wp_postmeta використовується для зберігання додаткових даних записів, сторінок та інших post types. WordPress також має окремі meta-таблиці для користувачів, коментарів і термінів.

Переглянути метадані конкретного запису

SELECT *
FROM wp_postmeta
WHERE post_id = 123;

Знайти конкретний meta_key

SELECT *
FROM wp_postmeta
WHERE meta_key = '_thumbnail_id';

Порахувати використання meta_key

SELECT meta_key, COUNT(*) AS total
FROM wp_postmeta
GROUP BY meta_key
ORDER BY total DESC;

Це дуже корисний запит для пошуку метаполів, які створюють плагіни.

Знайти рідкісні meta_key

SELECT meta_key, COUNT(*) AS total
FROM wp_postmeta
GROUP BY meta_key
HAVING total < 5
ORDER BY total ASC;

Видалити конкретне метаполе

Спочатку:

SELECT *
FROM wp_postmeta
WHERE meta_key = 'my_custom_field';

Після перевірки:

DELETE FROM wp_postmeta
WHERE meta_key = 'my_custom_field';

⚠️ Не видаляйте meta_key, якщо не знаєте, який плагін або тема його використовує.

👤 Робота з користувачами

Переглянути всіх користувачів

SELECT ID, user_login, user_email, user_registered
FROM wp_users
ORDER BY ID;

Знайти користувача за логіном

SELECT *
FROM wp_users
WHERE user_login = 'admin';

Знайти користувача за email

SELECT *
FROM wp_users
WHERE user_email = 'user@example.com';

Змінити логін користувача

UPDATE wp_users
SET user_login = 'newlogin'
WHERE user_login = 'oldlogin';

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

Змінити email користувача

UPDATE wp_users
SET user_email = 'new@example.com'
WHERE ID = 123;

Змінити display_name

UPDATE wp_users
SET display_name = 'Нове ім’я'
WHERE ID = 123;

Змінити сайт користувача

UPDATE wp_users
SET user_url = 'https://example.com'
WHERE ID = 123;

🔐 Скидання пароля користувача

У старих довідниках часто зустрічається:

UPDATE wp_users
SET user_pass = MD5('newpassword')
WHERE user_login = 'admin';

Такий підхід краще не використовувати як основний спосіб.

Якщо є доступ до WordPress, безпечніше скористатися стандартним механізмом WordPress або WP-CLI:

wp user update 123 --user_pass='NewStrongPassword'

Або:

wp user reset-password 123

Пряме редагування user_pass через SQL варто залишати для аварійних сценаріїв, коли штатні інструменти недоступні.

💬 Робота з коментарями

Переглянути останні коментарі

SELECT comment_ID, comment_author, comment_content, comment_date
FROM wp_comments
ORDER BY comment_date DESC
LIMIT 50;

Знайти спам

SELECT *
FROM wp_comments
WHERE comment_approved = 'spam';

Видалити всі спам-коментарі

DELETE FROM wp_comments
WHERE comment_approved = 'spam';

Це один із найкорисніших SQL-запитів для очищення WordPress.

Порахувати спам

SELECT COUNT(*) AS spam_count
FROM wp_comments
WHERE comment_approved = 'spam';

Видалити всі pingback

DELETE FROM wp_comments
WHERE comment_type = 'pingback';

Видалити всі trackback

DELETE FROM wp_comments
WHERE comment_type = 'trackback';

Закрити коментарі для всіх записів

UPDATE wp_posts
SET comment_status = 'closed';

⚠️ Це змінить налаштування коментарів для всіх постів і сторінок, тому перед виконанням обов'язково зробіть резервну копію.

Закрити pingback

UPDATE wp_posts
SET ping_status = 'closed';

⚙️ Робота з wp_options

Таблиця wp_options містить важливі налаштування WordPress. Серед них — URL сайту, email адміністратора та багато даних плагінів і тем.

Переглянути основні налаштування

SELECT option_name, option_value
FROM wp_options
WHERE option_name IN (
    'siteurl',
    'home',
    'admin_email'
);

Переглянути URL сайту

SELECT option_name, option_value
FROM wp_options
WHERE option_name IN ('siteurl', 'home');

Змінити адресу WordPress

UPDATE wp_options
SET option_value = 'https://example.com'
WHERE option_name = 'siteurl';
UPDATE wp_options
SET option_value = 'https://example.com'
WHERE option_name = 'home';

⚠️ Виконуйте це тільки під час реальної зміни домену або URL сайту.

Змінити email адміністратора

UPDATE wp_options
SET option_value = 'admin@example.com'
WHERE option_name = 'admin_email';

Знайти великі options

SELECT
    option_name,
    LENGTH(option_value) AS size
FROM wp_options
ORDER BY size DESC
LIMIT 50;

Це особливо корисно під час оптимізації бази даних.

Знайти autoload options

SELECT
    option_name,
    LENGTH(option_value) AS size
FROM wp_options
WHERE autoload = 'yes'
ORDER BY size DESC
LIMIT 50;

Великі autoload-опції можуть збільшувати обсяг даних, які WordPress завантажує під час запитів. Перед видаленням або зміною таких записів потрібно встановити, який плагін їх створив.

🏷️ Робота з категоріями та тегами

Переглянути всі терміни

SELECT *
FROM wp_terms
ORDER BY name;

Знайти категорію або тег за назвою

SELECT *
FROM wp_terms
WHERE name LIKE '%WordPress%';

Переглянути кількість записів у категоріях

SELECT
    t.term_id,
    t.name,
    tt.taxonomy,
    tt.count
FROM wp_terms t
JOIN wp_term_taxonomy tt
    ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'category'
ORDER BY tt.count DESC;

Переглянути популярні теги

SELECT
    t.term_id,
    t.name,
    tt.count
FROM wp_terms t
JOIN wp_term_taxonomy tt
    ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'post_tag'
ORDER BY tt.count DESC;

🔍 Пошук даних у базі

Пошук по базі часто потрібен під час:

  • перенесення сайту;
  • зміни домену;
  • пошуку шкідливого коду;
  • видалення старого плагіна;
  • пошуку старих URL;
  • міграції HTTP → HTTPS;
  • пошуку конкретного shortcode;
  • діагностики помилок.

Пошук у контенті

SELECT ID, post_title
FROM wp_posts
WHERE post_content LIKE '%example.com%';

Пошук у заголовках

SELECT ID, post_title
FROM wp_posts
WHERE post_title LIKE '%SEO%';

Пошук у postmeta

SELECT post_id, meta_key
FROM wp_postmeta
WHERE meta_value LIKE '%example.com%';

Пошук у налаштуваннях

SELECT option_name
FROM wp_options
WHERE option_value LIKE '%example.com%';

Для великих баз даних повний LIKE '%текст%' може бути ресурсомістким.

Якщо доступний WP-CLI, для пошуку рядка по базі можна використовувати wp db search. Офіційна документація WP-CLI наводить приклади пошуку значення в wp_options, wp_posts, wp_users та інших таблицях.

🧹 Очищення бази даних

Видалення записів із кошика

Перед видаленням:

SELECT ID, post_title
FROM wp_posts
WHERE post_status = 'trash';

Після перевірки:

DELETE FROM wp_posts
WHERE post_status = 'trash';

⚠️ Просте видалення записів із wp_posts може залишити пов'язані метадані.

Тому після ручного очищення варто перевірити wp_postmeta.

Пошук orphaned postmeta

Знайти метадані, для яких уже немає відповідного запису:

SELECT pm.meta_id, pm.post_id, pm.meta_key
FROM wp_postmeta pm
LEFT JOIN wp_posts p
    ON pm.post_id = p.ID
WHERE p.ID IS NULL
LIMIT 100;

Після перевірки такі записи можна видалити:

DELETE pm
FROM wp_postmeta pm
LEFT JOIN wp_posts p
    ON pm.post_id = p.ID
WHERE p.ID IS NULL;

⚠️ Перед виконанням DELETE обов'язково перевірте результат через SELECT.

🗑️ Видалення orphaned commentmeta

SELECT cm.meta_id, cm.comment_id, cm.meta_key
FROM wp_commentmeta cm
LEFT JOIN wp_comments c
    ON cm.comment_id = c.comment_ID
WHERE c.comment_ID IS NULL
LIMIT 100;

Після перевірки:

DELETE cm
FROM wp_commentmeta cm
LEFT JOIN wp_comments c
    ON cm.comment_id = c.comment_ID
WHERE c.comment_ID IS NULL;

🔄 Заміна HTTP на HTTPS

Під час міграції сайту на HTTPS потрібно знайти старі URL.

SELECT ID, post_title
FROM wp_posts
WHERE post_content LIKE '%http://example.com%';

Також:

SELECT option_name
FROM wp_options
WHERE option_value LIKE '%http://example.com%';

І:

SELECT post_id, meta_key
FROM wp_postmeta
WHERE meta_value LIKE '%http://example.com%';

⚠️ Не варто бездумно виконувати глобальний REPLACE() по всій базі.

WordPress, WooCommerce та плагіни можуть зберігати серіалізовані PHP-дані. Простий SQL REPLACE() може пошкодити довжини рядків у serialized data.

Для міграції URL краще використовувати інструменти, які розуміють структуру WordPress, наприклад WP-CLI або спеціалізовані migration/search-replace інструменти.

🌐 Зміна домену сайту

Базові URL:

UPDATE wp_options
SET option_value = 'https://new-domain.com'
WHERE option_name = 'siteurl';
UPDATE wp_options
SET option_value = 'https://new-domain.com'
WHERE option_name = 'home';

Але цього недостатньо для повної міграції сайту.

Старий домен може залишитися:

  • у wp_posts;
  • у wp_postmeta;
  • у wp_options;
  • у wp_usermeta;
  • у таблицях WooCommerce;
  • у таблицях сторонніх плагінів.

Для складних міграцій краще використовувати інструменти, які коректно працюють із serialized data.

📊 Корисні діагностичні SQL-запити

Кількість записів за статусом

SELECT post_status, COUNT(*) AS total
FROM wp_posts
GROUP BY post_status
ORDER BY total DESC;

Кількість записів за типом

SELECT post_type, COUNT(*) AS total
FROM wp_posts
GROUP BY post_type
ORDER BY total DESC;

Це допоможе побачити, які custom post types використовуються на сайті.

Кількість коментарів за статусом

SELECT comment_approved, COUNT(*) AS total
FROM wp_comments
GROUP BY comment_approved;

Кількість користувачів за датою реєстрації

SELECT
    DATE(user_registered) AS registration_date,
    COUNT(*) AS total
FROM wp_users
GROUP BY DATE(user_registered)
ORDER BY registration_date DESC;

Перевірити версію MySQL/MariaDB

SELECT VERSION();

Перевірити розмір таблиць

У WP-CLI можна використовувати:

wp db size --tables

WP-CLI підтримує виведення розміру окремих таблиць WordPress.

🔎 SQL для SEO та технічного аудиту

SQL може бути корисним не тільки розробникам, а й під час SEO-аудиту WordPress.

Знайти записи без заголовка

SELECT ID, post_title, post_status
FROM wp_posts
WHERE post_type = 'post'
AND post_status = 'publish'
AND post_title = '';

Знайти дуже короткі записи

SELECT
    ID,
    post_title,
    LENGTH(post_content) AS content_length
FROM wp_posts
WHERE post_type = 'post'
AND post_status = 'publish'
ORDER BY content_length ASC
LIMIT 100;

Знайти записи з однаковими заголовками

SELECT
    post_title,
    COUNT(*) AS total
FROM wp_posts
WHERE post_type = 'post'
AND post_status = 'publish'
GROUP BY post_title
HAVING total > 1
ORDER BY total DESC;

Це може бути корисно для пошуку потенційних проблем із дублюванням контенту.

Знайти записи з конкретним shortcode

SELECT ID, post_title
FROM wp_posts
WHERE post_content LIKE '%[shortcode%';

Знайти записи, у яких зустрічається iframe

SELECT ID, post_title
FROM wp_posts
WHERE post_content LIKE '%<iframe%';

Знайти зовнішні URL у контенті

Повноцінний аналіз зовнішніх посилань краще виконувати спеціалізованими SEO-інструментами, але SQL можна використовувати для пошуку конкретного домену:

SELECT ID, post_title
FROM wp_posts
WHERE post_content LIKE '%example.com%';

🛒 SQL-запити для WooCommerce

WooCommerce додає власні таблиці та використовує дані WordPress для товарів, замовлень та метаданих.

Назви таблиць і структура можуть відрізнятися залежно від версії WooCommerce та способу зберігання даних, тому перед виконанням SQL потрібно перевіряти актуальну структуру конкретного сайту.

Знайти товари

У класичній моделі товар є post type:

SELECT ID, post_title, post_status
FROM wp_posts
WHERE post_type = 'product'
ORDER BY ID DESC;

Порахувати товари

SELECT COUNT(*) AS products
FROM wp_posts
WHERE post_type = 'product';

Знайти товари без ціни

SELECT p.ID, p.post_title
FROM wp_posts p
LEFT JOIN wp_postmeta pm
    ON p.ID = pm.post_id
    AND pm.meta_key = '_price'
WHERE p.post_type = 'product'
AND p.post_status = 'publish'
AND pm.post_id IS NULL;

Знайти товари за SKU

SELECT
    p.ID,
    p.post_title,
    pm.meta_value AS sku
FROM wp_posts p
JOIN wp_postmeta pm
    ON p.ID = pm.post_id
WHERE p.post_type = 'product'
AND pm.meta_key = '_sku'
AND pm.meta_value = 'SKU123';

⚠️ Для сучасних версій WooCommerce частина даних може зберігатися не тільки в wp_posts / wp_postmeta. Перед написанням складних SQL-запитів перевіряйте структуру таблиць конкретної версії WooCommerce.

🧠 SQL-запити через WP-CLI

Якщо є SSH-доступ до сервера, часто зручніше використовувати WP-CLI.

Наприклад:

wp db query "SELECT ID, post_title FROM wp_posts WHERE post_status = 'publish' LIMIT 10"

Перевірити таблиці:

wp db tables

Експортувати базу:

wp db export backup.sql

Пошук тексту:

wp db search "example.com"

WP-CLI має окремі команди для роботи з базою, включаючи wp db query, wp db search, wp db tables, wp db size та експорт бази.

🔐 Безпечне використання SQL у WordPress

Якщо SQL виконується безпосередньо в phpMyAdmin або Adminer, головна небезпека — випадково змінити не ті дані.

Якщо ж SQL використовується всередині плагіна або теми, особливо важливо правильно обробляти динамічні значення.

WordPress рекомендує використовувати $wpdb і wpdb::prepare() для SQL-запитів із динамічними параметрами.

Наприклад:

global $wpdb;

$user_id = 123;

$sql = $wpdb->prepare(
    "SELECT * FROM {$wpdb->users} WHERE ID = %d",
    $user_id
);

$user = $wpdb->get_row($sql);

Для текстового значення:

global $wpdb;

$email = 'user@example.com';

$sql = $wpdb->prepare(
    "SELECT * FROM {$wpdb->users} WHERE user_email = %s",
    $email
);

$user = $wpdb->get_row($sql);

Для пошуку через LIKE використовуйте esc_like() перед prepare(). WordPress окремо документує такий порядок операцій.

global $wpdb;

$search = 'WordPress';

$like = '%' . $wpdb->esc_like( $search ) . '%';

$sql = $wpdb->prepare(
    "SELECT ID, post_title
     FROM {$wpdb->posts}
     WHERE post_title LIKE %s",
    $like
);

$posts = $wpdb->get_results( $sql );

❌ Не робіть так

$id = $_GET['id'];

$sql = "SELECT * FROM wp_posts WHERE ID = $id";

Якщо значення походить від користувача, такий підхід може створити SQL injection.

✅ Робіть так

$id = absint( $_GET['id'] );

$sql = $wpdb->prepare(
    "SELECT * FROM {$wpdb->posts} WHERE ID = %d",
    $id
);

Окрім безпеки, WordPress рекомендує по можливості використовувати стандартний WordPress API замість ручних SQL-запитів.

🧱 Не прив'язуйтеся до wp_

У статтях про SQL часто використовують:

SELECT * FROM wp_posts;

Але wp_ — не гарантований префікс.

У WordPress префікс може бути змінений під час встановлення.

Тому в PHP краще:

global $wpdb;

$table = $wpdb->posts;

або:

$table = $wpdb->prefix . 'my_custom_table';

Для динамічних назв таблиць у сучасному WordPress wpdb::prepare() підтримує %i для identifiers.

Наприклад:

$table = $wpdb->prefix . 'my_custom_table';

$sql = $wpdb->prepare(
    "SELECT * FROM %i",
    $table
);

🚨 Небезпечні SQL-запити

Особливо обережно потрібно працювати з:

DELETE FROM ...
UPDATE ...
TRUNCATE TABLE ...

та:

DROP TABLE ...

Найнебезпечніший варіант:

DELETE FROM wp_posts;

Такий запит може видалити практично весь контент із таблиці постів.

Ще небезпечніше:

DROP TABLE wp_posts;

Це вже видалення всієї таблиці.

Ніколи не запускайте подібні запити на production-сайті без повного розуміння наслідків і резервної копії.

🧪 Безпечний алгоритм роботи з DELETE та UPDATE

Перед:

DELETE FROM wp_postmeta
WHERE meta_key = 'example';

виконайте:

SELECT *
FROM wp_postmeta
WHERE meta_key = 'example';

Перед:

UPDATE wp_posts
SET post_status = 'draft'
WHERE post_type = 'post';

виконайте:

SELECT ID, post_title, post_status
FROM wp_posts
WHERE post_type = 'post';

Це просте правило допомагає уникнути великої кількості помилок:

Спочатку SELECT → перевірка результату → backup → UPDATE/DELETE.

📋 Шпаргалка SQL-запитів WordPress

ЗавданняSQL
Переглянути постиSELECT * FROM wp_posts;
Знайти пост за IDSELECT * FROM wp_posts WHERE ID = 123;
Знайти заголовокWHERE post_title LIKE '%текст%'
Порахувати постиSELECT COUNT(*) FROM wp_posts;
Знайти чернеткиWHERE post_status = 'draft'
Знайти спамWHERE comment_approved = 'spam'
Видалити спамDELETE FROM wp_comments WHERE comment_approved = 'spam';
Знайти користувачаSELECT * FROM wp_users WHERE user_login = 'admin';
Змінити emailUPDATE wp_users SET user_email = '...' WHERE ID = 123;
Переглянути optionsSELECT * FROM wp_options;
Переглянути URLWHERE option_name IN ('siteurl','home')
Знайти meta_keySELECT * FROM wp_postmeta WHERE meta_key = '...'
Порахувати meta_keyGROUP BY meta_key
Знайти категоріїSELECT * FROM wp_terms;
Перевірити версію БДSELECT VERSION();

💡 Коли SQL для WordPress дійсно потрібен?

SQL особливо корисний у таких ситуаціях:

  • 🔧 відновлення доступу до сайту;
  • 🔄 міграція WordPress;
  • 🌐 зміна домену;
  • 🔐 аварійне відновлення;
  • 🧹 очищення бази;
  • 💬 масове видалення спаму;
  • 👤 керування користувачами;
  • 🔎 пошук конкретних даних;
  • 📊 технічний аудит;
  • 🛠️ розробка власних плагінів;
  • 🛒 аналіз WooCommerce;
  • 🚀 оптимізація бази даних.

При цьому SQL не завжди є найкращим інструментом. Якщо для конкретної операції WordPress уже має штатну функцію або WP-CLI-команду, краще використовувати її. Це відповідає рекомендаціям WordPress щодо безпеки та роботи з API.

❓ FAQ корисних SQL запитів для WordPress

Чи безпечно виконувати SQL-запити у WordPress?

Так, якщо ви розумієте, що робить запит, маєте резервну копію та використовуєте правильний синтаксис. Найбільший ризик становлять DELETE, UPDATE, TRUNCATE і DROP.

Де виконувати SQL-запити WordPress?

Найчастіше використовують phpMyAdmin, Adminer, MySQL/MariaDB CLI або WP-CLI.

Чи завжди таблиця WordPress називається wp_posts?

Ні. wp_ — стандартний префікс, але адміністратор може встановити інший.

Як знайти префікс таблиць WordPress?

Його можна перевірити у файлі wp-config.php:

$table_prefix = 'wp_';

Наприклад:

$table_prefix = 'abc_';

Тоді таблиця постів буде:

abc_posts

Як видалити всі спам-коментарі?

DELETE FROM wp_comments
WHERE comment_approved = 'spam';

Перед видаленням рекомендується перевірити результат через SELECT.

Як знайти великі wp_options?

SELECT
option_name,
LENGTH(option_value) AS size
FROM wp_options
ORDER BY size
DESC LIMIT 50;

Чи можна змінити URL WordPress через SQL?

Так. Основні значення зберігаються в wp_options:

UPDATE wp_options
SET option_value = 'https://example.com'
WHERE option_name = 'siteurl';

UPDATE wp_options
SET option_value = 'https://example.com'
WHERE option_name = 'home';

Але для повної міграції домену цього недостатньо.

Чи можна використовувати SQL для SEO-аудиту?

Так. За допомогою SQL можна шукати записи без заголовків, дублікати заголовків, старі URL, shortcode, конкретні метаполя та інші технічні проблеми.

Чи можна запускати SQL через WP-CLI?

Так:

wp db query "SELECT COUNT(*) FROM wp_posts"

WP-CLI також має команди для пошуку, експорту, перевірки таблиць та аналізу розміру бази.

🏁 Висновок

SQL — потужний інструмент для адміністрування та розробки WordPress. Він дозволяє швидко працювати з даними, які іноді складно або неможливо змінити через стандартну адміністративну панель.

Найчастіше SQL використовується для:

  • пошуку інформації;
  • масового редагування;
  • очищення бази;
  • роботи з користувачами;
  • роботи з коментарями;
  • діагностики;
  • міграції сайтів;
  • технічного SEO-аудиту;
  • аналізу WooCommerce.

Однак пряме редагування бази даних потребує обережності. Перед UPDATE або DELETE спочатку перевіряйте дані через SELECT, а перед критичними операціями робіть резервну копію.

Якщо SQL використовується у власному WordPress-коді, для динамічних значень використовуйте $wpdb->prepare(), а коли існує штатний WordPress API — віддавайте йому перевагу.

Михайло Петров
Михайло Петров

Мене звати Михайло. Я — WordPress-розробник. Створюю візитки, корпоративні сайти, інтернет-магазини, блоги на WordPress. Надаю консультації з WordPress.