17 февр. 2009 г.

Полезные SQL приемы для WordPress

LLLMTT

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

Плагины и некоторые приемы с кодами помогают решить некоторые проблемы и задачи, но иногда у вас нет другого выбора, кроме как выполнить команды SQL в phpMyAdmin или непосредственно в базе данных через SSH. Итак, давайте рассмотрим 8 полезных SQL приемов для WordPress. В каждом пункте этого поста сформулирована проблема, предложено ее решение и его объяснение.
1. Создание резервной копии базы данных

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

Решение. Для создания резервной копии вашей базы данных WordPress вручную:

1. Войдите в phpMyAdmin и выберите свою базу данных WordPress.

2. Затем нажмите кнопку «Экспорт», расположенную в горизонтальном меню.

3. Выберите метод сжатия (я, лично, использую gzip) и нажмите кнопку «Выполнить».

4. Ваш браузер спросит вас, хотите ли вы скачать резервную копию. Конечно же, нужно нажать «Да» и сохранить копию у себя на жестком диске.

Объяснение. Есть более простой способ создания резервной копии базы данных WordPress с помощью плагина WP-DB-Backup. Если вы используете WordPress, то вам нужно обязательно установить этот плагин, если вы еще этого не сделали, и периодически создавать резервные копии своих данных.

2. Пакетное удаление редакций записей

Проблема. Редакции записей - это новая функция в WordPress 2.6, которая очень полезна, но при этом увеличивает размер вашей базы данных MySQL. Конечно же, можно вручную удалить редакции записей, но это будет очень долгая и нудная работа.

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

1. Войдите в phpMyAdmin и выберите свою базу данных WordPress.

2. Нажмите кнопку «SQL». Вставьте следующий код в командное окно SQL:

DELETE FROM wp_posts WHERE post_type = "revision";

3. Вот и все. В зависимости от того, сколько постов у вас было в вашей базе данных WordPress, вы, возможно, сохранили уйму драгоценного времени!

Объяснение кода. В таблице wp_posts есть поле с названием post_type. В этом поле может встречаться один из таких параметров, как «post», «page» или «revision». Если мы хотим избавиться от редакций записей, то нужно выполнить команду удаления всех записей в таблице wp_posts, в которых поле post_type имеет параметр «revision».

3. Удаление 5000 спам-комментариев за одну секунду

Проблема. Реальная история: один мой друг недавно создал свой собственный блог и начал его продвигать в Интернете. Через несколько недель кропотливой работы он решил отдохнуть и провел несколько дней в отпуске без доступа к Интернету.

Когда он вернулся домой и посмотрел на свой блог, то увидел… 5000+ комментарий, ожидающих проверки! Конечно же, большинство из них были спамом, но ему в самом деле пришлось проверить их все, чтобы не удалить случайно нормальный комментарий одного из своих постоянных читателей.

Решение. К счастью, мой друг рассказал мне об этой проблеме со спамом. Он потратил уже около 45 минут, удаляя спам, когда я показал ему этот полезный SQL прием.

1. Войдите в phpMyAdmin и выберите свою базу данных WordPress.

2. Нажмите кнопку «SQL». Вставьте следующий код в командное окно SQL:

DELETE from wp_comments WHERE comment_approved = '0';

3. Прощай спам! У вас чистая база данных, без спама!

Объяснение. Таблица wp_comments содержит поле с названием comment_approved, которое является булевым значением (1 или 0). Одобренные комментарии имеют значение 1, а ожидающие проверки – значение 0. Выполнив указанную выше команду, мы просто удаляем комментарии, которые еще не были одобрены.

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

4. Изменение автора поста

Проблема. Когда вы устанавливали WordPress, была создана учетная запись «admin». Некоторые блоггеры делают ошибку, оставляя эту учетную запись без изменений и создавая посты под админом, пока не осознают, что это делает их посты безличными.

Решение. На изменение автора каждого поста уйдет много времени. К счастью SQL может помочь вам справиться с этой задачей:

1. Войдите в phpMyAdmin и выберите свою базу данных WordPress.

2. Сначала нужно узнать правильные идентификаторы пользователей. Для этого откройте командное окно SQL и выполните следующую команду:

SELECT ID, display_name FROM wp_users;

3. phpMyAdmin покажет список идентификаторов пользователей, присвоенных пользователям WordPress. Допустим NEW_AUTHOR_ID – это идентификатор недавно созданного автора, а OLD_AUTHOR_ID – это идентификатор исходной учетной записи админа.

4. После замените OLD_AUTHOR_ID на NEW_AUTHOR_ID, выполните следующую команду:

UPDATE wp_posts SET post_author=NEW_AUTHOR_ID WHERE post_author=OLD_AUTHOR_ID;

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

5. Восстановление пароля вручную

Проблема. Для того чтобы защитить свои блоги, люди выбирают сложные пароли, например: u7*KoF5i8_. Это хорошо, но мне приходилось слышать немало историй о том, как люди забывали свои пароли админа.

Решение. Если вы потеряли пароль, WordPress может выслать вам по электронной почте ссылку для восстановления пароля. Но если у вас больше нет доступа к ящику, записанному в базе данных WordPress, или вы просто хотели бы все сделать с помощью простой команды, то выполните следующее:

1. Войдите в phpMyAdmin, выберите свою базу данных WordPress и откройте окно SQL.

2. Вставьте следующую команду (допустим, ваше имя пользователя - admin):

UPDATE `wp_users` SET `user_pass` = MD5('PASSWORD') WHERE `wp_users`.`user_login` =`admin` LIMIT 1;

3. Вот и все. Ваш пароль будет успешно заменен тем набором символов, который вы укажете вместо PASSWORD в указанной выше команде.

Объяснение. Пароли пользователей хранятся в таблице wp_users. Для защиты пароля используется контрольная сумма MD5.

Мы должны выполнить запрос SQL «UPDATE» и использовать встроенную функцию MySQL «MD5()», чтобы преобразовать наш пароль в MD5 и затем обновить его. Оператор «WHERE» позволяет обновить только пароль админа. Такой же запрос без оператора «WHERE» приведет к обновлению всех паролей!

6. Изменение имени домена WordPress блога

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

Решение.

1. Как вы уже догадались, сначала нужно войти в phpMyAdmin и выбрать свою базу данных WordPress.

2. Нажмите кнопку «SQL» и откройте командное окно SQL. Для изменения своего URL-адреса WordPress, сначала выполните следующую команду:

UPDATE wp_options SET option_value = replace(option_value, 'http://www.oldsite.com', 'http://www.newsite.com') WHERE option_name = 'home' OR option_name = 'siteurl';

3. Затем нужно заменить соответствующий URL (guid) каждого поста. Это выполнит следующая команда:

UPDATE wp_posts SET guid = replace(guid, 'http://www.oldsite.com','http://www.newsite.com');

4. Мы почти закончили. Осталось лишь осуществить поиск и замену в таблице wp_posts, чтобы убедиться, что не осталось ни одного абсолютного URL-адреса:

UPDATE wp_posts SET post_content = replace(post_content, 'http://www.oldsite.com', 'http://www.newsite.com');

5. Вот и все. Теперь вы можете войти в свою панель управления WordPress по новому URL-адресу.

Объяснение. Для простого изменения имени домена я воспользовался мега-полезной функцией MySQL «replace», которая позволяет заменить один термин другим.

7. Отображение количества запросов SQL в вашем блоге

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

Решение.

1. В этот раз не нужно входить в phpMyAdmin. Просто откройте файл footer.php в своей теме и добавьте в конце следующие строки кода:

<?php if (is_user_logged_in()) { ?>

<?php echo get_num_queries(); ?> queries in <?php timer_stop(1); ?> seconds.

<?php } ?>

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

Объяснение. Создается впечатление, что многие пользователи WordPress и не подозревают о существовании этой функции. Функция get_num_queries() показывает количество запросов, выполненных во время загрузки страницы.

Учтите, что этот код покажет количество запросов только для пользователей, вошедших в систему, так как обычным посетителям и поисковым ботам нет необходимости знать об этом. Но если вам захочется выставить эти данные на всеобщее обозрение, просто удалите условие if (is_user_logged_in()).

8. Восстановление базы данных WordPress

Проблема. Допустим, по какой-либо причине (например, взлом или проблема с обновлением), вы потеряли данные своего блога, или они были нарушены. Если у вас есть резервная копия (а я надеюсь она у вас есть!), то вам нужно будет импортировать ее в базу данных WordPress.

Решение.

1. Войдите в phpMyAdmin и выберите свою базу данных WordPress.

2. Нажмите кнопку «Импорт» в горизонтальном меню.

3. Нажмите кнопку «Обзор» и выберите последнюю резервную копию базы данных на своем жестком диске.

4. Нажмите кнопку «Выполнить». Если вы все сделали правильно, то у вас снова есть полностью функциональная база данных WordPress.