Как включить / активировать WordPress плагин функцией автоматически
Доброго времени суток, друг!
Пару лет назад мне понадобилось в одном из плагинов реализовать возможность включать и выключать другой плагин при нажатии на кнопку. Я искал решение и обнаружил, что это сделать можно очень просто меня содержимое одного поля в таблице wp_options вордпресса. Это решение может пригодиться вам, например, если вы создали свою тему для wordpress и хотите, чтобы при активации вашей темы, включался какой-то связанный с ней плагин. Или же, чтобы при включении вашего плагина, активировался другой необходимый плагин (например, какой-нибудь фреймворк для плагинов).
И сейчас я с вами с удовольствием поделюсь этим ценным решением.
Итак, WordPress хранит все настройки движка, настройки тем и плагинов в таблице wp_options, и там же есть одна запись, которая нам и нужна. Она называется "active_plugins".
Ниже, я приведу пример кода, который будет включать или отключать функционально нужные нам плагины, а вы уже можете потом использовать его как вам угодно. А если вдруг вам что-то непонятно, то, пожалуйста, пишите в комментах ниже и я вам постараюсь помочь. Также, я поделюсь одной фишкой, которая позволит вам вывести содержимое опции active_plugins в вашей админке, чтобы отслеживать изменения ее значения.
В опции active_plugins в формате массива хранятся пути к главному скрипту каждого плагина, типа akismet/akismet.php, а не название или какой-нибудь другой идентификатор.
// подключаем нашу функцию к хуку admin_init, // который исполняется в самом начале загрузки любой страницы админки add_action( 'admin_init', 'gb_activate_plugins' ); function gb_activate_plugins() { // проверяем права текущего пользователя, может ли он включать плагины if( ! current_user_can('activate_plugins') ) wp_die(__('Упс, у вас недостаточно прав, чтобы включать плагины на этом сайте.')); $active_plugins = FALSE; // получаем список активных плагинов (это массив строк) $active_plugins = get_option('active_plugins'); // если список получен успешно, идем дальше, это защита от ошибок if( $active_plugins ) { // какие плагины нам нужно включить $plugins_to_push = array( 'hello.php', // это Hello Dolly 'akismet/akismet.php', // и Akismet ); foreach( $plugins_to_push as $plugin ) { // если плагин еще не включен, то заносим его в массив активных плагинов if( ! in_array( $plugin, $active_plugins ) ) { array_push( $active_plugins, $plugin ); } } // обновляем массив активных плагинов update_option( 'active_plugins', $active_plugins ); } // endif $active_plugins }
Функция, которая описана ниже, выводит на странице в админке Плагины - Установленные под каждым вашим плагином путь к его основному исполняемому файлу. Используйте ее, чтобы быстрее находить нужные вам строки. Можно вставить ее в functions.php вашей темы, как сделал я на скриншоте в начале этой заметки.
// подключить функцию к фильтру, который исполняется на странице // со списком всех плагинов в админке, после ссылок "Активировать" / "Удалить" add_filter( 'plugin_row_meta', 'gb_get_plugin_string', 10, 4 ); function gb_get_plugin_string( $plugin_meta, $plugin_file, $plugin_data, $status ) { // вывести путь к основному файлу плагина echo '<code>' . $plugin_file . '</code>'; return $plugin_meta; }
А как вы, если не секрет, будете использовать это решение? Если вам что-то непонятно, или что-то не получается, пожалуйста, задайте вопрос в комментах, а я попробую вам помочь.
Удачного дня!
[ Прочитайте комменты ниже или напишите свой... ]
Прошу помощи! Создал тему, на основе собственной верстки под WORDPRESS. Пытаюсь внедрить плагины. Они загружаются, активируются, но никакого их присутствия на своей странице я не вижу. Наверное что-то где-то нужно дописать, подправить. Подскажите где?