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

Vol*_*ike 1 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');
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,使用Linux命令行工具来捕获具有此代码的所有站点,并强制进行页面查看.该页面视图将导致上述代码触发并激活该其他插件.就我所知,这就是如何以编程方式激活给定插件中的另一个插件.

但问题是它会一次又一次地被激活.如果我有一个if/then条件和一些我可以在WordPress中调用的函数来查看该插件是否已经激活,并且只有在激活时才激活它,那将是多么美妙的事情.

Vol*_*ike 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');
   }
Run Code Online (Sandbox Code Playgroud)

您可以将该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');
  }
  */
}
}
Run Code Online (Sandbox Code Playgroud)