判断某个插件是否启用在某些情况下很有用,比如插件需要用户在主题中放置模板标签,比如某些功能依赖于某个插件等等。在WordPress前台和后台判断插件启用的方法略有不同,本文会详细介绍。

在后台判断插件是否启用

WordPress API有一个专门用来判断插件是否启用的,名为is plugin active。仔细读一下文档加粗的文字,说明了该函数的使用范围。

该函数定义在wp-admin/includes/plugin.php中,所以该函数只在后台页面起作用。

要在后台判断插件是否启用,这样做就可以。

<?php
   If (is_plugin_active('plugin-directory/plugin-file.php')) {
      //plugin is activated
   }
?> 

在前台判断插件是否启用

上面说的is_plugin_active也可以用到前台,但需要引入定义它的文件,所以在前台应该这样用

<?php include_once( ABSPATH . 'wp-admin/includes/plugin.php' ); ?>
<?php is_plugin_active($plugin) ?> 

还有另一种方法

If (in_array( 'plugin-directory/plugin-file.php', 
apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) )

这种方法也极其好用,不用引入额外的文件。

通过代码启用插件

来自wpengineer.com的文章《Activate WordPress Plugins Automatically via a Function》介绍了一种用代码启用插件的方法,

<?php
// example on admin init, control about register_activation_hook()
add_action( 'admin_init', 'fb_activate_plugins' );
	// the exmple function
	function fb_activate_plugins() {
		if ( ! current_user_can('activate_plugins') )
			wp_die(__('You do not have sufficient permissions to activate plugins for this site.'));
		$plugins = FALSE;
		$plugins = get_option('active_plugins'); // get active plugins
		if ( $plugins ) {
		// plugins to active
			$pugins_to_active = array(
			'hello.php', // Hello Dolly
			'adminimize/adminimize.php', // Adminimize
			'akismet/akismet.php' // Akismet
		);
		foreach ( $pugins_to_active as $plugin ) {
			if ( ! in_array( $plugin, $plugins ) ) {
				array_push( $plugins, $plugin );
				update_option( 'active_plugins', $plugins );
			}
		}
	} // end if $plugins
}
?>

所有激活的插件都会向wp_options表中的active_plugins字段写数据,上面的代码就是通过更改active_plugins的值用代码激活插件。

同理,不是很难想象,要想禁用所有插件,也可以直接操作数据库,清空wp_options表的active_plugins字段就可以了

UPDATE wp_options SET option_value = '' WHERE option_name = 'active_plugins';

WordPress内置两个函数亦可以启用或禁用插件,但必须在后台页面使用。

启用插件

例如启用wp-postviews插件

add_action('admin_init','enable_wp_postviews');
function enable_wp_postviews() {
	activate_plugins( 'wp-postviews/wp-postviews.php' );
}

禁用插件

禁用wp-postviews插件

add_action('admin_init','disable_wp_postviews');
function disable_wp_postviews() {
	deactivate_plugins( 'wp-postviews/wp-postviews.php' );
}

参考文章

Activate WordPress Plugins Automatically via a Function

Quickly Disable or Enable All WordPress Plugins via the Database

Using is_plugin_active within functions.php

How Do I Programmatically Check if a WordPress Plugin Is Already Activated?