Как включить / активировать WordPress плагин функцией автоматически

Пример вывода пути к файлу плагина через фильтр plugin_raw_meta

Доброго времени суток, друг!

Пару лет назад мне понадобилось в одном из плагинов реализовать возможность включать и выключать другой плагин при нажатии на кнопку. Я искал решение и обнаружил, что это сделать можно очень просто меня содержимое одного поля в таблице 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;
}

А как вы, если не секрет, будете использовать это решение? Если вам что-то непонятно, или что-то не получается, пожалуйста, задайте вопрос в комментах, а я попробую вам помочь.

Удачного дня!

[ Прочитайте комменты ниже или напишите свой... ]

Ищете хостинг для своего сайта? Могу порекомендовать свой (нажмите здесь)

Комментариев пока нет.