2010-04-20 82 views
1

我知道我可以使用WordPress中给定的活动插件中的activate_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中调用的函数来查看该插件是否已经激活,并且只在激活时才激活它,那么最好的办法就是一次。

回答

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

您可以在插件目录路径设置无论是固定的路径,或相对路径。 (只是不是网址的路径)

请注意,必须加载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'); 
    } 
    */ 
} 
} 
相关问题