Статьи

База данных WordPress демистифицирована

С момента выпуска более десяти лет назад WordPress стал самым популярным выбором CMS как для начинающих, так и для экспертов. Хотя установка WordPress и добавление данных не требуют каких-либо знаний о базовой структуре, вы можете оказаться в ситуации, когда требуется некоторое знание базы данных.

База данных WordPress

Хотя любимым выбором пользователей для работы с базами данных часто является phpMyAdmin , мы сосредоточимся на необработанных SQL-запросах, имея в виду, что всем может не понравиться phpMyAdmin (у вас есть возможность в phpMyAdmin запускать необработанные SQL-запросы! ).

Изучение базы данных

Как вы, наверное, знаете, WordPress использует MySQL. Чтобы войти в MySQL, запустите в своем терминале следующее:

mysql -u [username] -p -D [database_name]

После того, как вы вошли в базу данных WordPress в MySQL, вы можете проверить таблицы, созданные WordPress, выполнив следующее:

 show tables;

Чтобы проверить структуру любой таблицы, выполните:

 desc [table_name];

Обратите внимание, что я буду описывать таблицы, созданные WordPress при новой установке. Установка новых плагинов может создать новые таблицы, о которых я не буду рассказывать в этом посте.

Также я предполагаю, что ваш префикс таблицы — «wp ». Если вы использовали другой префикс таблицы, замените «wp » на ваш префикс в именах таблиц.

Я объясню таблицы в логическом порядке, а не в алфавитном порядке, который вы найдете в большинстве уроков.

wp_options

В таблице wp_options Все параметры, которые вы задали в настройках на панели инструментов, хранятся в этой таблице.

wp_users, wp_usermeta

Как следует из названия, wp_users Он содержит основную информацию о пользователе, такую ​​как логин, пароль (который зашифрован), электронная почта, время регистрации, отображаемое имя, статус и ключ активации (если требуется).

wp_usermeta Например, last_namewp_usermetawp_users

В этой таблице есть два поля, о которых вы должны знать — meta_keymeta_value Плагины могут хранить пользовательские значения метаданных о пользователях в мета-таблице, используя новые значения meta_key

wp_posts, wp_postmeta

wp_posts Все сообщения (и страницы) и их редакции доступны в таблице wp_posts Даже элементы меню навигации хранятся в этой таблице.

Типы записей (сообщения, страницы, пункты меню или ревизии) различаются по столбцу post_type Позже в этом посте мы увидим, как мы можем использовать запросы в этой таблице в наших интересах.

wp_postmeta

Если вы используете плагин SEO, все метатеги, сгенерированные для постов, сохраняются в этой таблице.

wp_terms, wp_term_relationships, wp_term_taxonomy

Категории и теги для постов, страниц или ссылок хранятся в таблице wp_terms Столбец, который содержит эта таблица, является slug Это помогает в SEO, так как робот Google выполняет поиск в URL и по поисковым запросам.

wp_term_relationship Он служит картой между этими объектами и терминами.

wp_term_taxonomy Вы можете представить это как метаданные терминов для простоты, просто плагин не может добавлять пользовательские значения в эту таблицу.

wp_comments, wp_commentmeta

wp_comments Эта таблица также содержит неутвержденные комментарии и информацию об авторе комментариев и вложенности комментариев. wp_commentmeta

Важно отметить, что если вы используете стороннюю систему комментирования, такую ​​как Disqus , ваши комментарии будут храниться не в вашей базе данных WordPress, а на серверах службы комментирования.

wp_links

Эта таблица содержит информацию о пользовательских ссылках, добавленных на ваш сайт. Это устарело, но его можно снова включить с помощью плагина Links Manager .

Вот графическое представление базы данных с таблицами, связанными друг с другом.

Графическое представление базы данных WordPress
Источник: WordPress.org

Использование SQL в ваших интересах

Язык структурированных запросов (SQL) — это компьютерный язык, который используется для управления данными в системах управления реляционными базами данных, таких как MySQL. Вы можете извлекать или манипулировать данными из таблиц базы данных, используя SQL. Мы попытаемся использовать некоторые запросы, которые помогут нам в выполнении определенных задач, которые в противном случае очень сложно или невозможно сделать с помощью панели управления WordPress.

Слово предостережения

Если вы планируете выполнять SQL-запросы, которые я собираюсь обсудить, вы должны знать, что сделанные ими изменения необратимы. Поэтому вы должны использовать BEGINCOMMITROLLBACK

Если вы BEGINROLLBACK

 BEGIN;
// Some Query
ROLLBACK;

Однако, если вы хотите, чтобы изменения остались, вы можете COMMIT

 BEGIN;
// Some Query
COMMIT;

Вы также можете сделать резервную копию вашей базы данных WordPress, используя дамп базы данных или плагин, такой как DB Backup, перед выполнением этих команд.

Теперь давайте рассмотрим несколько приемов, которые мы можем использовать для облегчения нашей работы.

Изменить имена по умолчанию

Вы, вероятно, знаете, что после создания пользователя WordPress не позволяет изменять имя пользователя. Однако вы можете сделать это через SQL, выполнив простую команду.

 UPDATE wp_users SET user_login = '[new_username]' WHERE user_login = '[old_username]';

Имя пользователя по умолчанию для администратора в WordPress — «admin», и из-за его популярности хакеры часто пробуют это имя пользователя. В целях безопасности рекомендуется изменить его на другое.

ОБНОВЛЕНИЕ: Это работало на момент написания, но не с недавних обновлений. Пожалуйста, смотрите комментарии ниже для получения дополнительной информации.

Измените свой пароль WordPress

Представьте, что вы администратор, и вы забыли свой пароль. Вы можете легко изменить его, если у вас есть доступ к базе данных.

 UPDATE wp_users SET user_pass = MD5( '[new_password]' ) WHERE user_login = '[username]';

Нам нужно использовать MD5

Изменить сообщение авторов в массовом

Если вы хотите передавать сообщения от одного автора другому, вы можете попробовать это с помощью простого SQL-запроса.

 UPDATE wp_posts SET post_author = [new_author_id] WHERE post_author = [old_author_id];

Сначала нужно проверить IDwp_users Однако, если вы ленивы, вы можете попробовать этот запрос, который выглядит сложным, но не требует проверки идентификатора автора.

 UPDATE
    wp_posts
SET
    post_author = (SELECT ID FROM wp_users WHERE user_login = '[new_author_login]')
WHERE
    post_author = (SELECT ID FROM wp_users WHERE user_login = '[old_author_login]');

Работа со спам-комментариями

Если вы не используете внешний сервис для обработки комментариев, скорее всего, вы получите много спам-комментариев. Если у вас много спама, вы можете попробовать использовать Akismet для проверки спама. Однако, если у вас уже много спама, вы можете попробовать несколько SQL-запросов к ним.

Вы можете удалить все спам-комментарии за один раз, используя следующее:

 DELETE FROM wp_comments WHERE comment_approved = 'spam';

Если вы хотите проверить, откуда поступают спам-комментарии, вы можете попробовать это:

 SELECT   comment_author_IP as ip_address, COUNT(*) AS count 
FROM     wp_comments
WHERE    comment_approved = 'spam'
GROUP BY ip_address 
ORDER BY count DESC

Он покажет вам, сколько спам-комментариев пришло с каждого IP-адреса.

Удалить все ревизии постов

Как я объяснил ранее, wp_posts Поэтому, если вы нажмете «Сохранить» десять раз во время написания поста, в вашей базе данных будет десять итераций поста. Все ревизии имеют post_type

Если вам интересно, сколько ревизий вы сгенерировали, выполните следующее. Я уверен, что число будет большим.

 SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';

Если вы хотите удалить все такие ревизии опубликованных постов, выполните следующую команду:

 DELETE p, t, m FROM wp_posts p
LEFT JOIN wp_term_relationships t ON (p.ID = t.object_id)
LEFT JOIN wp_postmeta m ON (p.ID = m.post_id)
WHERE p.post_type = 'revision'

Причина, по которой я использовал LEFT JOIN

Обновление ссылок в сообщениях

Если вы переходите на новый домен, есть вероятность, что в ваших сообщениях будет много ссылок, ссылающихся на ваш старый домен. Изменение их вручную может быть утомительной работой. Однако для этой цели может использоваться простая команда SQL.

 UPDATE wp_posts SET post_content = REPLACE (post_content, '[old_domain]', '[new_domain]');

Этот запрос выполняет поиск вхождений вашего старого домена в столбце post_content

Вывод

На этом мы подошли к концу этого урока. Мы надеемся, что этот пост изменил ваше представление о том, как WordPress работает в фоновом режиме, и помог вам выработать более четкое понимание структуры базы данных. Несмотря на то, что в настоящее время есть плагины для всего, вам следует подумать дважды, прежде чем устанавливать их все, особенно если у вас есть более простая и быстрая альтернатива.

Знаете ли вы какие-либо другие трюки SQL для WordPress? Мы пропустили что-то важное? Дайте нам знать в комментариях ниже!