Начало > Помощен център > Апликации > WordPress > Деактивиране на WordPress плъгини в базата данни

Деактивиране на WordPress плъгини в базата данни

Помощен център

Деактивиране на 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:

Функция търсене Search в phpMyAdmin

В примера търсенето показва резултати само в таблицата ngxwp-options (prefix-options, тъй като със сигурност вашите таблици имат различен префикс от ngxwp), защото ползваме тестова база данни от сайт без публикации. Ако имате публикации (pages, posts, comments), които съдържат думата за търсене plugins, ще има резултати и в таблицата prefix-posts. Ние обаче се интересуваме само от резултатите в таблицата ngxwp-options тъй като искаме да деактивираме плъгини, а не да редактираме статии.

Кликаме линка Browse и се зареждат редовете, които съдържат думата за търсене plugins:

Списък с резултати от търсене в phpMyAdmin

Важни за нас са записите в колоната option_name на ред active_plugins . Кликаме линка Edit на същия ред за да влезем в интерфейса за редактиране:

Линк Edit към интерфейс за редактиране в phpMyAdmin

Маркираме и изтриваме съдържанието на реда option_value в колона Value:

Изтриване на съдържание в phpMyAdmin

За да запазим промяната кликаме само единия от двата бутона Go:

  • след натискане на бутона вдясно ще останем на същата страница;
  • ако натиснем бутона под двете падащи менюта Save и Go back to previous page ще се върнем на предишната страница в phpMyAdmin;

Бутони Go за запазване на промени в phpMyAdmin

Сега вече всички плъгини са деактивирани, въпреки че директориите им са запазени в wp-content/plugins, защото не са регистрирани в бaзата данни. Бърза проверка в администрацията ни убеждава, че нашите два плъгина са наистина деактивирани:

Деактивирани плъгини в WordPress

Описаният начин деактивира всички плъгини. Може да деактивираме един плъгин по следния начин.

Деактивиране на отделен 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 е деактивиран:

Само 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

Деактивирането само на един плъгин от няколко става по същия начин като описания по-горе.

  1. Изпълняваме командата SELECT * FROM... за получим списък с регистрираните плъгини и копираме съдържанието в текстов редактор.
  2. Премахваме записа за съответния плъгин;
  3. Редактираме цифрата след буквата a:2: в началото на записа;
  4. Възстановяваме синтаксиса на записа на един ред (без нов ред);
  5. Поставяме (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 държи всички процеси 'под око'.