Wordpress - is_plugin_active() returning false on active plugin

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
}

in case you dont know which plugins are active you can do the following.

// get array of active plugins
$active_plugins = (array) get_option( 'active_plugins', array() );
// see active plugins 'plugin-dir-name/plugin-base-file.php'
echo '<pre>';
print_r( $active_plugins );
echo '</pre>';
if ( ! empty( $active_plugins ) && in_array( 'plugin-dir-name/plugin-base-file.php', $active_plugins ) ) {
    // do something if plugin is active
}

for reference take a look into is_plugin_active function inside 'wp-admin/includes/plugin.php'

function is_plugin_active( $plugin ) {
    return in_array( $plugin, (array) get_option( 'active_plugins', array() ) ) || is_plugin_active_for_network( $plugin );
}