wordpress如何判断插件是否启用


判断某个插件是否启用在某些情况下很有用,比如插件需要用户在主题中放置模板标签,比如某些功能依赖于某个插件等等。在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' );
}

Have any Question or Comment?

发表评论

普人特福的博客cnzz&51la for wordpress,cnzz for wordpress,51la for wordpress