Как программно проверить, активирован ли плагин WordPress? - PullRequest
1 голос
/ 20 апреля 2010

Я знаю, что могу использовать activ_plugin () внутри данного активного плагина в WordPress, чтобы активировать другой плагин. Но я хочу знать, как программно проверить, активен ли этот плагин?

Например, этот фрагмент кода можно временно добавить в исходный файл существующего плагина для активации плагина партнера:

add_action('wp','activatePlugins');

function activatePlugins() {
  if( is_single() || is_page() || is_home() || is_archive() || is_category() || is_tag()) {
    @ activate_plugin('../mypartnerplugin/thepluginsmainfile.php');
  }
}

Затем используйте инструмент командной строки Linux, чтобы создать паук на всех ваших сайтах, на которых есть этот код, и он вызовет просмотр страницы. Этот просмотр страницы вызовет приведенный выше код и активирует этот другой плагин. Вот как я могу сказать, программно активировать другой плагин из данного плагина.

Но проблема в том, что он активируется снова и снова и снова. Было бы замечательно, если бы у меня было условие if / then и некоторая функция, которую я мог бы вызвать в WordPress, чтобы посмотреть, активирован ли этот плагин, и активировать его только один раз, если он не активен.

1 Ответ

10 голосов
/ 20 апреля 2010

Вот решение:

http://codex.wordpress.org/Function_Reference/is_plugin_active

<?php
   if (!is_plugin_active('plugin-directory-path/plugin-file.php')) {
      @ activate_plugin('plugin-directory-path/plugin-file.php');
   }

Вы можете установить этот путь к каталогу подключаемого модуля либо к фиксированному пути, либо к относительному пути. (Только не путь к веб-URL.)

Обратите внимание, что wp-admin / includes / plugin.php должен быть загружен для работы вышеуказанного кода. Таким образом, окончательное решение было:

add_action('wp','myPluginTool');

function myPluginTool() {
if( is_single() || is_page() || is_home() || is_archive() || is_category() || is_tag()) {

  $sDir = dirname(__FILE__);
  $sDir = rtrim($sDir, '/');
  $sDir = str_replace('/myplugin','',$sDir); // myplugin was folder name of current plugin
  $sDir = rtrim($sDir, '/');

  require_once($sDir . '/../../wp-admin/includes/plugin.php');

  // DEACTIVATE
  if (is_plugin_active($sDir . '/partnerplugin/partner.php')) {
    deactivate_plugins($sDir . '/partnerplugin/partner.php');
  }

  /*
  // ACTIVATE
  if (!is_plugin_active($sDir . '/partnerplugin/partner.php')) {
    activate_plugin($sDir . '/partnerplugin/partner.php');
  }
  */
}
}
...