如何以编程方式检查WordPress插件是否已被激活?

时间:2010-04-20 03:56:12

标签: wordpress wordpress-plugin

我知道我可以在WordPress的给定活动插件中使用activate_plugin()来激活另一个插件。但我想知道的是如何以编程方式检查该插件是否已经处于活动状态?

例如,可以将这段代码临时添加到现有插件的初始文件中以激活合作伙伴插件:

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 个答案:

答案 0 :(得分:10)

以下是解决方案:

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');
   }

您可以将该plugin-directory-path设置为固定路径或相对路径。 (只是一个Web 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');
  }
  */
}
}