Cambiar el valor predeterminado del mensaje "Plugin activado"

11

Siempre que un administrador en WordPress active un complemento, al volver a cargar la página del complemento, aparecerá un aviso cuando se active con éxito el informe "Complemento activado".

Captura de pantalla del mensaje de complemento activado

¿Hay alguna forma de cambiar este texto que aparece dentro del aviso de administrador o debo usar mi propio mensaje personalizado? Además, si debo usar un mensaje personalizado, ¿esto suprimirá el mensaje predeterminado "Complemento activado"?

Preguntas relacionadas:

Duplicar:

Gracias a Pieter por el hallazgo:

Recursos adicionales:

Nota

Recuerde que aunque el filtro 'gettext' solo se aplica durante las llamadas a la translate()función, translate()prácticamente todas las demás funciones de i18n en i18n.php lo utilizan . Estas incluyen todas las funciones enumeradas aquí en esta publicación sobre " Sintaxis de Gettext ".

gate_engineer
fuente
Ve y echa un vistazo a esta pregunta stackoverflow.com/q/14095642/1908141
Pieter Goosen el

Respuestas:

14

Puedes probar esto:

is_admin() && add_filter( 'gettext', 
    function( $translated_text, $untranslated_text, $domain )
    {
        $old = array(
            "Plugin <strong>activated</strong>.",
            "Selected plugins <strong>activated</strong>." 
        );

        $new = "Captain: The Core is stable and the Plugin is <strong>activated</strong> at full Warp speed";

        if ( in_array( $untranslated_text, $old, true ) )
            $translated_text = $new;

        return $translated_text;
     }
, 99, 3 );

para modificar el mensaje a tu gusto:

traducido

Podemos refinarlo aún más:

Si solo desea activar el filtro en la /wp-admins/plugins.phppágina, puede usar lo siguiente en su lugar:

add_action( 'load-plugins.php',
    function(){
        add_filter( 'gettext', 'b2e_gettext', 99, 3 );
    }
);

con:

/**
 * Translate the "Plugin activated." string
 */
function b2e_gettext( $translated_text, $untranslated_text, $domain )
{
    $old = array(
        "Plugin <strong>activated</strong>.",
        "Selected plugins <strong>activated</strong>." 
    );

    $new = "Captain: The Core is stable and the Plugin is <strong>activated</strong> at full Warp speed";

    if ( in_array( $untranslated_text, $old, true ) )
        {
            $translated_text = $new;
            remove_filter( current_filter(), __FUNCTION__, 99 );
        }
        return $translated_text;
}

donde eliminamos la devolución de llamada del filtro gettext tan pronto como tenemos una coincidencia.

Si queremos verificar el número de llamadas gettext realizadas, antes de que coincidamos con la cadena correcta, podemos usar esto:

/**
 * Debug gettext filter callback with counter
 */
function b2e_gettext_debug( $translated_text, $untranslated_text, $domain )
{
        static $counter = 0;
        $counter++;

        $old = "Plugin <strong>activated</strong>.";
        $new = "Captain: The Core is stable and the Plugin is <strong>activated</strong> at full Warp speed";
        if ( $untranslated_text === $old )
        {
            $translated_text = $new;
            printf( 'counter: %d - ', $counter );
            remove_filter( current_filter(), __FUNCTION__ , 99 );
        }
        return $translated_text;
}

y recibo 301llamadas en mi instalación: 301

Puedo reducirlo solo a 10llamadas:

10

agregando el filtro gettext dentro del in_admin_headergancho, dentro del load-plugins.phpgancho:

add_action( 'load-plugins.php',
    function(){
        add_action( 'in_admin_header',
            function(){
                add_filter( 'gettext', 'b2e_gettext_debug', 99, 3 );
            }
        );
    }
);

Tenga en cuenta que esto no contará las llamadas gettext antes de la redirección interna utilizada cuando se activan los complementos.

Para activar nuestro filtro después de la redirección interna, podemos verificar los parámetros GET utilizados cuando se activan los complementos:

/**
 * Check if the GET parameters "activate" and "activate-multi" are set
 */
function b2e_is_activated()
{
    $return         = FALSE;
    $activate       = filter_input( INPUT_GET, 'activate',       FILTER_SANITIZE_STRING );
    $activate_multi = filter_input( INPUT_GET, 'activate-multi', FILTER_SANITIZE_STRING );

    if( ! empty( $activate ) || ! empty( $activate_multi ) )
        $return = TRUE;

    return $return;
}

y usar así:

b2e_is_activated() && add_filter( 'gettext', 'b2e_gettext', 99, 3 );

en el ejemplo de código anterior.

Birgire
fuente
1
Lo has clavado, la función gettex. Excelente movimiento
Pieter Goosen
¿Por qué encadenaron is_admin () y add_filter () con un operador lógico &&? ¿Hay algún tipo de evaluación de cortocircuito en el que si el usuario no es administrador, add_filter no se ejecutará?
gate_engineer
1
Excelente respuesta! +1 y lo haría +10 para vigilar el rendimiento con el get_textfiltro.
kaiser
1
sí, eso debería funcionar de manera similar @blackhawk
birgire
1
El problema es la redirección. ¿Verifique el parámetro GET 'plugin'? Si no está disponible, puede conectarlo a check_admin_referer y seleccionar 'active-plugin_'. $ plugin para escribir una opción que dice que se ha activado y luego eliminarlo nuevamente en la carga de la página plugins.php. ¿Quizás la opción recientemente_activada puede ayudar? Podría ser mejor servido como una nueva pregunta @Omer
birgire