Когато не му се спи на човек ума му решава да прави неща, които в нормални условия не биха се случили (не и в този вид).
Ето и списък с няколко интересни SQL заявки, които можете да използвате докато работите с WordPress.
Как да покажем общия брой публикувани постове за определена година
В този блог за 2017 година съм публикувал 155 поста. Чудя се това малко ли са или много, но колкото-толкова.
Интересно е друго – начина по който видях това. Оказа се съвсем лесно с SQL заявка, която изглежда по този начин:
select count(*) from wp_posts where YEAR(post_date) = 2017 and post_type = 'post' and post_status = 'publish'
Имайте предвид, че тази заявка показва само публикуваните постовете (не page или някакъв custom post type) за 2017 г.
Примерен резултат:
mysql> select count(*) from wp_posts where YEAR(post_date) = 2017 and post_type = 'post' and post_status = 'publish';
+----------+
| count(*) |
+----------+
| 155 |
+----------+
1 row in set (0.00 sec)
Ако искате да видите колко draft-а имате можете да изпълните тази заявка:
select count(*) from wp_posts where YEAR(post_date) = 2017 and post_type = 'post' and post_status = 'draft'
Примерен резултат:
mysql> select count(*) from wp_posts where YEAR(post_date) = 2017 and post_type = 'post' and post_status = 'draft';
+----------+
| count(*) |
+----------+
| 116 |
+----------+
1 row in set (0.00 sec)
И не – няма грешка. Имам цели 116 поста, които така и не съм публикувал, повечето от които са започнати и недовършени истории, няколко tutorial-а (още ме е яд, че не завърших този за HTTP/2) и няколко пътеписа.
Как да сменим siteurl и homeurl с един ред
Ако не сте чували за siteurl и homeurl няма страшно. Но ако се наложи да мигрирате сайта, да смените домейна или да добавите/премахнете HTTPS поддържка ще се наложи да поработите с тях.
UPDATE wp_options SET option_value = replace(option_value, 'http://www.nedko.info', 'https://www.nedko.info') WHERE option_name = 'home' OR option_name = 'siteurl'
След изпълнението на тази заявка при опит да достъпя сайта ще бъда пренасочван автоматично от non-HTTPS към HTTPS версията на блога. Можете да я използвате и при смян на домейн да кажем като смените втория линк на този, който желаете. Не е най-добрия пример, но е важно да схванете как работят siteurl и homeurl. Друга полза е ако ъпдейтвате сайта и имате да мигрирате да кажем https://nedko.info/v2 към https://nedko.info.
Работа с пароли
Не сме безгрешни – забравяме си понякога паролите или при нужда да дебъгнем проблема в някой клиентски сайт понякога се налага да влезем с подходящите инструменти.
UPDATE wp_users SET user_pass = MD5( '123456' ) WHERE user_login = 'admin'
Тази заявка ще смени паролата на потребителя admin с 123456.
Ако ви се наложи да работите върху клиентска инсталация, но не искате да сменяте паролата на потребителя можете първо да запишете хеша ѝ със следната заявка:
select user_login,user_pass from wp_users
Примерен резутат:
mysql> select user_login,user_pass from wp_users;
+------------+---------------------------------------------------+
| user_login | user_pass | |
+------------+---------------------------------------------------+
| admin | $P$B5&50UGz0.kW3tq6jifraX.hT!РqZP. |
+------------+---------------------------------------------------+
1 row in set (0.00 sec)
Сега запишете стойността на user_pass полето, изпълнете горната заявка, която ще смени паролата на 123456 и като сте готови просто изпълнете следната заявка за да върнете старата парола:
UPDATE wp_users SET user_pass = '$P$B5&50UGz0.kW3tq6jifraX.hT!РqZP.' WHERE user_login = 'admin'
Изтриване на всички спам коментари
Преди време ми се наложи да изтрия от един блог над 10 000 коментара. Tricky-то беше, че имаше и коментари от хора, не само спам. Решението е тривиално и се нарича Akismet. Безплатната версия върши страхотна работа, но имах проблем с привилегиите на DB потребителя и коментарите маркирани като спам не се триеха. За това използвах тази заявка за да ги изчистя (~10 000 коментара от които 90%-95% спам се изтриха за под 2 секунди):
DELETE FROM wp_comments WHERE comment_approved = 'spam'
Ако искате да изтриете и тези със статус awaiting moderation можете да ипозлвате следната заявка:
DELETE FROM wp_comments WHERE comment_approved = '0'
Как да видим всички неизползвани тагове
Ако искате да видите дали имате тагове, които никога не са използвани можете да изпълните тази заявка:
SELECT name,count from wp_terms wt INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy='post_tag' AND wtt.count=0
Примерен резултат:
mysql> SELECT name,count from wp_terms wt INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy='post_tag' AND wtt.count=0
-> ;
+--------+-------+
| name | count |
+--------+-------+
| blabla | 0 |
+--------+-------+
1 row in set (0.00 sec)
Ако обаче искат да видите (спорд мен далеч по-практично) тагове, които са използвани 5 или по-малко пъти, сортирани по възходящ ред можете да изпълните следната заявка:
SELECT name,count from wp_terms wt INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy='post_tag' AND wtt.count<5 order by wtt.count DESC
Примерен резултат:
mysql> SELECT name,count from wp_terms wt INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy='post_tag' AND wtt.count<5 order by wtt.count
+--------------------------------------------------------+-------+
| name | count |
+--------------------------------------------------------+-------+
| blabla | 0 |
| humor | 1 |
| кино | 1 |
| котка | 1 |
| vulnerability | 1 |
+--------------------------------------------------------+-------+
5 rows in set (0.00 sec)
Извличане на всички мейли от коментарите на потребителите
Маркетинг хората имат нужда да пращат таргетирани съобщения до разни хора и един страхотен начин да изкарате списък с всички мейли от коментиралите по блога хора е следния:
select comment_author_email,comment_author_url,comment_date from wp_comments order by comment_date DESC
Тази заявка ще покаже мейла, сайта (ако има такъв попълнен) и датата на коментара. Това можете да го ползвате като ориентация.
Примерен резултат ще върне следните данни:
[email protected] | http://www.somedomain.com | 2017-11-01 17:18:19 |
Иначе можете да лимитирате само до списък с мейлите така:
select comment_author_email from wp_comments
P.S. For non-Bulgarian speakers:
- What are you doing here?
- If you think that the article will be useful I can translate it in English.