I want to detect Yoast SEO. I already use this function:
function active( $plugin ) {
$network_active = false;
if ( is_multisite() ) {
$plugins = get_site_option( 'active_sitewide_plugins' );
if ( isset( $plugins[$plugin] ) ) {
$network_active = true;
}
}
return in_array( $plugin, get_option( 'active_plugins' ) ) || $network_active;
}
if ( active( 'wordpress-seo/wp-seo.php' ) {
And that works fine. But if Yoast ever thinks of renaming wordpress-seo/wp-seo.php
, this function becomes useless. So we need to add an backup, something which is hard to change, like the WPSEO_VERSION
constant:
if ( active( 'wordpress-seo/wp-seo.php' ) {
// activate
} elseif( defined( 'WPSEO_VERSION' )) {
// activate
} else {
// deactivate
}
This line if( defined( 'WPSEO_VERSION' )) {
for some reason does not detect Yoast.. how is that possible?
Thanks everyone.
plugins_loaded
hook as Fencer04 pointed out. The hookplugins_loaded
is triggered whenever all plugins are loaded, thus all constants and classes exist. Plugins are loaded in an order which can not be relied upon, it's not alphabetically. See codex.wordpress.org/Plugin_API/Action_Reference/plugins_loaded - Hope this helps, Jip from Yoast. – moorscode