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.
4
Answers
Your function is probably checking WPSEO_VERSION before YOAST is loaded. Try using one of the following hooks to run the function that checks the WPSEO_VERSION constant.
The most simple method to detect it be the
<!-- / Yoast SEO plugin. -->
that Yoast adds in the source code, you can find it and if it’s there, you got it. For example, here is a site that you can see in its source code.The simplest way is:
Function Reference/is plugin active
This is as safe you can get:
And I would also suggest: