WordPress: compruebe si el complemento está instalado

5 minutos de lectura

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
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

avatar de usuario
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
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
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
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
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?