Деактивиране на WordPress плъгини в базата данни
Съдържание
Деактивиране на WordPress плъгини в базата данни
Случва се понякога да имаме проблеми с достъпа до WordPress след активиране на плъгин и трябва да се логнем отново, за да променим настройки на въпросния плъгин или да го деактивираме, но ... нямаме достъп до администрацията.
Ако имаме достъп до файловете на WordPress, в повечето случаи преименуване или изтриване директорията на плъгина в wp-content/plugins го деактивира.
За съжаление, не можем да потвърдим, че всички (близо 55000) плъгина в официалното хранилище на WordPress работят коректно по този начин. Представете си, че има плъгин, който създава собствен запис в базата данни, изтриването на файловете няма да премахне този запис.
Информацията в тази статия може да се окаже изключително полезна ако някога се окажем в подобна ситуация, тъй като ни показва как да деактивираме един или всички плъгини през phpMyAdmin или SSH, в зависимост от начина, по който достъпваме базата данни на сайта (ще покажем как се прави и през двата интерфейса).
Ако имате съмнения коя база данни ползва сайта трябва да проверите във файла wp-config.php в главната директория на WordPress. Препоръчаме добрата практика при инсталиране на WordPress да запазвате в отделен файл цялата информация за администратора, базата данни и контактния имейл.
Деактивиране на всички WordPress плъгини през phpMyAdmin
Инсталирали сме phpMyAdmin на нашия сървър и през него имаме достъп до всички бази данни. Логваме се в коректната база данни и кликаме бутона Search. В полето за търсене въвеждаме plugins, маркираме всички WordPress таблици като в секция Inside tables кликнем линка Select all и кликаме бутона Go:
В примера търсенето показва резултати само в таблицата ngxwp-options (prefix-options, тъй като със сигурност вашите таблици имат различен префикс от ngxwp), защото ползваме тестова база данни от сайт без публикации. Ако имате публикации (pages, posts, comments), които съдържат думата за търсене plugins, ще има резултати и в таблицата prefix-posts. Ние обаче се интересуваме само от резултатите в таблицата ngxwp-options тъй като искаме да деактивираме плъгини, а не да редактираме статии.
Кликаме линка Browse и се зареждат редовете, които съдържат думата за търсене plugins:
Важни за нас са записите в колоната option_name на ред active_plugins . Кликаме линка Edit на същия ред за да влезем в интерфейса за редактиране:
Маркираме и изтриваме съдържанието на реда option_value в колона Value:
За да запазим промяната кликаме само единия от двата бутона Go:
- след натискане на бутона вдясно ще останем на същата страница;
- ако натиснем бутона под двете падащи менюта Save и Go back to previous page ще се върнем на предишната страница в phpMyAdmin;
Сега вече всички плъгини са деактивирани, въпреки че директориите им са запазени в wp-content/plugins, защото не са регистрирани в бaзата данни. Бърза проверка в администрацията ни убеждава, че нашите два плъгина са наистина деактивирани:
Описаният начин деактивира всички плъгини. Може да деактивираме един плъгин по следния начин.
Деактивиране на отделен WordPress плъгин през phpMyAdmin
Внимателно изтриваме само неговата регистрация и намаляваме цифрата след буквата а, защото тя показва общия брой активирани плъгини:
a:3:
{
i:0;s:61:"advanced-nocaptcha-recaptcha/advanced-nocaptcha-recaptcha.php";
i:1;s:33:"classic-editor/classic-editor.php";
i:2;s:33:"wps-hide-login/wps-hide-login.php";
}
Форматирахме реда за да различаваме по-лесно отделните елементи на записа.
Ако решим да деактивираме класическия редактор трябва да изтрием целия ред:
i:1;s:33:"classic-editor/classic-editor.php";
и да променим a:3:
на a:2:
:
a:2:
{
i:0;s:61:"advanced-nocaptcha-recaptcha/advanced-nocaptcha-recaptcha.php";
i:2;s:33:"wps-hide-login/wps-hide-login.php";
}
Ако опитаме да запазим информацията по този начин в phpMyAdmin, ще деактивираме всички плъгини и в полето WordPress ще създаде записа a:0:{}
.
Трябва да копираме записа в текстов редактор като Notepad или Notepad++, a не в текстов процесор като MS Word или Google Docs и да форматираме обратно записа без нови редове:
a:2:{i:0;s:61:"advanced-nocaptcha-recaptcha/advanced-nocaptcha-recaptcha.php";i:2;s:33:"wps-hide-login/wps-hide-login.php";}
Запазваме информацията през бутона Go и рефрешваме панела с плъгините в администрацията на сайта - classic-editor е деактивиран:
Заради вероятността от допускане на грешка, препоръчаме да деактивирате всички плъгини (като изтриете всички записи) и през админстрацията на WordPress да активирате коректно работещите плъгини отново като ползвате функцията за масови действия (Bulk Actions).
Деактивиране на всички WordPress плъгини през SSH
Абсолютно същите действия - изтриване на регистрацията на активните плъгини в базата данни на WordPress, може да бъдат извършени и през команден ред, което ще ви покажем в тази част от статията.
Логваме се в базата данни през терминал - може да ползваме данните на root потребителя или на конкретния MySQL потребител:
[cmonx@ngx public]$ mysql -u root -p
Enter password:
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| ngxwpdb |
| performance_schema |
+--------------------+
Влизаме в коректната база данни на сайта:
MariaDB [(none)]> use ngxwpdb;
Database changed
MariaDB [ngxwpdb]> show tables;
+--------------------------+
| Tables_in_ngxwpdb |
+--------------------------+
| ngxwp_commentmeta |
| ngxwp_comments |
| ngxwp_links |
| ngxwp_options |
| ngxwp_postmeta |
| ngxwp_posts |
| ngxwp_term_relationships |
| ngxwp_term_taxonomy |
| ngxwp_termmeta |
| ngxwp_terms |
| ngxwp_usermeta |
| ngxwp_users |
+--------------------------+
Със следната команда проверяваме регистрацията на активните плъгини:
MariaDB [ngxwpdb]> SELECT * FROM `ngxwp_options` WHERE `option_name` LIKE 'active_plugins';
+-----------+----------------+--------------+----------+
| 33 | active_plugins | a:2:{i:0;s:61:"advanced-nocaptcha-recaptcha/advanced-nocaptcha-recaptcha.php";i:1;s:33:"classic-editor/classic-editor.php";} | yes |
+-----------+----------------+--------------+----------+
MariaDB [ngxwpdb]>
Премахваме всички записи със следната команда като актуализираме съдържанието на полето value в реда active_plugins с нулева стойност (след option_value = ''
в командата има две единични кавички, а не една двойна):
MariaDB [ngxwpdb]> UPDATE ngxwp_options SET option_value = '' WHERE option_name = 'active_plugins';
MariaDB [ngxwpdb]>
Отново проверяваме дали имаме регистрирани активни плъгини и получаваме празен резултат:
MariaDB [ngxwpdb]> SELECT * FROM `ngxwp_options` WHERE `option_name` LIKE 'active_plugins';
+-----------+----------------+--------------+----------+
| 33 | active_plugins | | yes |
+-----------+----------------+--------------+----------+
MariaDB [ngxwpdb]>
Деактивиране на отделен WordPress плъгин през SSH
Деактивирането само на един плъгин от няколко става по същия начин като описания по-горе.
- Изпълняваме командата SELECT * FROM... за получим списък с регистрираните плъгини и копираме съдържанието в текстов редактор.
- Премахваме записа за съответния плъгин;
- Редактираме цифрата след буквата
a:2:
в началото на записа; - Възстановяваме синтаксиса на записа на един ред (без нов ред);
- Поставяме (paste) новия запис между единичните кавички в командата Update:
UPDATE ngxwp_options SET option_value = 'a:1:{i:0;s:61:"advanced-nocaptcha-recaptcha/advanced-nocaptcha-recaptcha.php";}' WHERE option_name = 'active_plugins';
Припомняме, че деактивирането на плъгините по този начин не премахва тяхната директория и те може да бъдат активирани отново през админстрацията на WordPress.
Преименуване или премахване директория на WordPress плъгин
За теста активирахме плъгин wps-hide-login и преименувахме неговата директория в wp-content/plugins на wwwwps-hide-login:
[cmonx@ngx public]$ cd wp-content/plugins/
[cmonx@ngx plugins]$ ll
drwxr-xr-x. 5 nginx nginx 4096 Oct 18 00:06 wps-hide-login
[cmonx@ngx plugins]$ sudo mv wps-hide-login/ wwwwps-hide-login/
[cmonx@ngx plugins]$ ll
drwxr-xr-x. 5 nginx nginx 4096 Oct 18 00:06 wwwwps-hide-login
[cmonx@ngx plugins]$
Рефрешнахме страницата Dashboard > Plugins в администрацията на WordPress и се появи следното съобщение:
Плъгинът wps-hide-login/wps-hide-login.php е деактивиран поради грешка: Файлът на плъгина не съществува.
Натискането на линка Delete премахна регистрацията на плъгина, но също така премахна и преименуваната директория на плъгина wwwwps-hide-login, което показва че WordPress държи всички процеси 'под око'.