is_plugin_active() returning false on active plugin

So I have the following in an include in my theme file:

include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if ( is_plugin_active( WP_PLUGIN_DIR . '/woocommerce/woocommerce.php' ) ) {
  $shop_id = woocommerce_get_page_id( 'shop' );
  $shop_page = get_page( $shop_id );
}

but is_plugin_active( WP_PLUGIN_DIR . '/woocommerce/woocommerce.php') is returning false, despite the fact that the plugin is active.

I’m wondering if is_plugin_active() might be tripped up by the theme customizer, because the fact that I’m doing this while hooked to customize_preview_init is the only gotcha that I can imagine would be causing issue. Any insights?

2 s
2

is_plugin_active() expects just the base name of the plugin as parameter:

So use:

is_plugin_active( 'woocommerce/woocommerce.php' );

The function will use the option 'active_plugins' which is a list of plugins paths relative to the plugin directory already.

On a multi-site installation it will search in get_site_option( 'active_sitewide_plugins') too.

As an implementation note: Avoid these checks. Some users rename plugin names or directories. Test for the functions you will actually use instead, eg:

if ( function_exists( 'woocommerce_get_page_id' ) )
{
    // do something
}

Leave a Comment