¿Cómo verificar si el complemento de WordPress está instalado y activado?

5 minutos de lectura

Avatar de usuario de J. Doe
j. cierva

Quiero comprobar si Yoast SEO está instalado en WordPress. He activado Yoast SEO en mi entorno de prueba, pero no funciona.

En el wp-seo-principal.php de Yoast, hay esta línea en la línea 16:

define( 'WPSEO_VERSION', '3.4' );

Entonces pensé, esa es una buena línea para verificar si Yoast está instalado y funcionando, así que lo hice:

if ( defined( 'WPSEO_VERSION' ) ) {
    echo '<script>alert("Yes, defined");</script>';
} else {
    echo '<script>alert("No, undefined");</script>';
}

Pero me da “No, indefinido”. Que raro, porque debería definirse.

¿Alguien tiene una idea? Estoy totalmente sin ideas.

  • tenga en cuenta wordpress.stackexchange.com también, su pregunta puede ser más adecuada allí

    – YakovL

    26 de julio de 2016 a las 18:03

  • @YakovL Sí, pero pensé que esto era más algo relacionado con PHP, pero resulta que hay funciones de wordpress para ello.

    – J. Doe

    26 de julio de 2016 a las 18:17

  • Por favor, echa un vistazo a mi función. ¡Contiene mucho para hacer una verificación buena y estable mediante el uso de funciones wp!

    – Sr. Jo

    14 de septiembre de 2020 a las 7:39

  • es La pregunta relevante aquí es si Yoast está instalado y corriendo o simplemente “instalado”? esto último me pregunto ¿Cuándo necesitamos saber si un complemento inactivo está en la carpeta de complementos? Así que supongo que como está escrito en la pregunta “… y corriendo” son las respuestas que debemos dar.

    – Jonas Lundmann

    19 de mayo de 2021 a las 7:29


Avatar de usuario de Jonas Lundman
jonas lundman

O sin inclusiones adicionales, front-end o back-end:

if ( in_array( 'wordpress-seo/wp-seo.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
    // do stuff only if Yoast is installed and active
}

Funciona con cualquier complemento, solo mire en su carpeta de complementos para tu objetivo: plugin-folder/plugin-index-name.php donde este último debe residir los detalles del complemento en la parte superior dentro del archivo.

Por favor revise el doc. referencia

  • Eso no es correcto!!!!! Esto comprueba si un complemento está activo. Si está inactivo pero instalado, no aparecerá aquí.

    – Sr. Jo

    12 de septiembre de 2020 a las 16:09

  • @ Mr.Jo, la pregunta es más que el “título de stackoverflow”. Como la solución de búsqueda de contexto de tema es “una buena línea para verificar si Yoast está instalado y ejecutándose …” Por lo tanto, la respuesta es correcta.

    – Jonas Lundmann

    13 de septiembre de 2020 a las 18:32

  • Sí, es correcto para verificar si está activo pero no para verificar si está instalado. Publicaré una respuesta correcta a continuación para verificar ambas de la manera correcta …

    – Sr. Jo

    14 de septiembre de 2020 a las 6:29

Mike Morris - Avatar de usuario de MBXSW
Mike Morris – MBXSW

Inspirado por la respuesta de Jonas Lundman, escribí esto para manejar también cuando Yoast premium está activo.

function is_yoast_active() {
    $active_plugins = apply_filters( 'active_plugins', get_option( 'active_plugins' ) );

    foreach ( $active_plugins as $plugin ) {
        if ( strpos( $plugin, 'wp-seo' ) ) {
            return true;
        }
    }

    return false;
}

Avatar de usuario de Naymul Hasan Tanvir
Naymul Hasan Tanvir

$all_plugins = get_plugins();

//print_r( $all_plugins );

if( array_key_exists( 'woolementor/woolementor.php', $all_plugins ) ){

     //do something
}

¡Gracias a todos los demás por hacer un buen trabajo hasta ahora! Pero la pregunta también se trata de verificar si un complemento está instalado y todas sus respuestas son solo sobre verificar si un complemento está activo.

Así que fui a mi patio de recreo y desarrollé una verificación correcta que quiero mostrarles usando las funciones que WP ya proporcionó.

// Check if needed functions exists - if not, require them
if ( ! function_exists( 'get_plugins' ) || ! function_exists( 'is_plugin_active' ) ) {
    require_once ABSPATH . 'wp-admin/includes/plugin.php';
}

/**
 * Checks if Yoast SEO is installed
 *
 * @return bool
 */
function is_wp_seo_installed(): bool {
    if ( check_plugin_installed( 'wordpress-seo/wp-seo.php' ) ) {
        return true;
    }

    return false;
}

/**
 * Check if Yoast SEO is activated
 *
 * @return bool
 */
function is_wp_seo_active(): bool {
    if ( check_plugin_active( 'wordpress-seo/wp-seo.php' ) ) {
        return true;
    }

    return false;
}

/**
 * Check if plugin is installed by getting all plugins from the plugins dir
 *
 * @param $plugin_slug
 *
 * @return bool
 */
function check_plugin_installed( $plugin_slug ): bool {
    $installed_plugins = get_plugins();

    return array_key_exists( $plugin_slug, $installed_plugins ) || in_array( $plugin_slug, $installed_plugins, true );
}

/**
 * Check if plugin is installed
 *
 * @param string $plugin_slug
 *
 * @return bool
 */
function check_plugin_active( $plugin_slug ): bool {
    if ( is_plugin_active( $plugin_slug ) ) {
        return true;
    }

    return false;
}

Como puede ver, he escrito dos funciones separadas para verificar si Yoast SEO está instalado y activo, así que solo necesito llamarlo y verificar el parámetro de retorno:

$installed = is_wp_seo_installed();
$active    = is_wp_seo_active();

if ( $installed && $active ) {
    echo 'WP SEO is installed and active!';
} else {
    echo 'WP SEO is not installed or active!';
}

Pero si desea omitir estas dos funciones adicionales, puede llamar directamente a las dos funciones de verificación:

$installed = check_plugin_installed( 'wordpress-seo/wp-seo.php' );
$active    = check_plugin_active( 'wordpress-seo/wp-seo.php' );

if ( $installed && $active ) {
    echo 'Yoast SEO is installed and active!';
} else {
    echo 'Yoast SEO is not installed or active!';
}

¡Espero que esto te ayude a hacer una buena verificación de instalado y activo!

Avatar de usuario de Dmitry
Dmitri

Use el siguiente código:

 <?php include_once ABSPATH . 'wp-admin/includes/plugin.php'; ?>
 <?php if ( is_plugin_active( 'wordpress-seo/wp-seo.php' ) ) :

      //do staff

 <?php endif; ?>

  • Esta es solo una copia de la respuesta aceptada, y se agrega 2 años después.

    – cavameta

    13 sep 2020 a las 18:37

Avatar de usuario de Het Shah
het shah

Esto es lo que funcionó para mí.

if(count(
        preg_grep(
            '/^wordpress-seo.*\/wp-seo.php$/',
            apply_filters('active_plugins', get_option('active_plugins'))
        )
    ) != 0
){
    // Plugin activated
}

  • Esta es solo una copia de la respuesta aceptada, y se agrega 2 años después.

    – cavameta

    13 sep 2020 a las 18:37

Avatar de usuario de Yusuf Çalışkan
Yusuf Çalışkan

Marque esto para obtener todos los nombres de complementos activos;

$callback = function($key){
    $key = explode("https://stackoverflow.com/", $key);
    return $key[0];                                        
}

$active_plugins = array_map($callback, get_option( 'active_plugins' ) );

¿Ha sido útil esta solución?