Modifica del messaggio "Plugin attivato" Impostazione predefinita


11

Ogni volta che un amministratore in WordPress attiva un plug-in, al ricaricamento della pagina del plug-in, verrà visualizzato un avviso in caso di attivazione riuscita che segnala "Plugin attivato".

Schermata del messaggio Plugin attivato

C'è un modo per modificare questo testo che appare all'interno dell'avviso di amministrazione o devo usare il mio messaggio personalizzato? Inoltre, se devo usare un messaggio personalizzato, questo eliminerà il messaggio predefinito "Plugin attivato"?

Domande correlate:

Duplicare:

Grazie a Pieter per la ricerca:

Risorse addizionali:

Nota

Ricorda che sebbene il filtro 'gettext' sia applicato solo durante le chiamate alla translate()funzione, translate()viene usato praticamente da tutte le altre funzioni i18n in i18n.php . Questi includono tutte le funzioni elencate qui in questo post su " Sintassi di Gettext ".


Vai e dai un'occhiata a questa domanda stackoverflow.com/q/14095642/1908141
Pieter Goosen

Risposte:


14

Puoi provare questo:

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

per modificare il messaggio a proprio piacimento:

tradotto

Possiamo perfezionarlo ulteriormente:

Se si desidera solo attivare il filtro sulla /wp-admins/plugins.phppagina, è possibile utilizzare invece quanto segue:

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

dove rimuoviamo il callback del filtro gettext non appena abbiamo una corrispondenza.

Se vogliamo controllare il numero di chiamate gettext effettuate, prima di abbinare la stringa corretta, possiamo usare questo:

/**
 * 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;
}

e ricevo 301chiamate sulla mia installazione: 301

Posso ridurlo alle sole 10chiamate:

10

aggiungendo il filtro gettext all'interno del in_admin_headergancio, all'interno del load-plugins.phpgancio:

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

Si noti che questo non conterà le chiamate gettext prima del reindirizzamento interno utilizzato quando i plugin sono attivati.

Per attivare il nostro filtro dopo il reindirizzamento interno possiamo verificare i parametri GET utilizzati quando i plugin sono attivati:

/**
 * 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;
}

e usare così:

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

nell'esempio di codice precedente.


1
L'hai inchiodato, la funzione gettex. Mossa eccellente
Pieter Goosen il

Perché hai messo insieme is_admin () e add_filter () con un operatore logico &&? Esiste una sorta di valutazione del corto circuito in cui se l'utente non è un amministratore, allora add_filter non verrà eseguito?
gate_engineer

1
Risposta eccellente! +1 e lo farei +10 per tenere d'occhio le prestazioni con il get_textfiltro.
Kaiser

1
sì, dovrebbe funzionare in modo simile @blackhawk
birgire,

1
Il problema è il reindirizzamento. Controlla il parametro 'plugin' OTTIENI? Se non disponibile, puoi collegarlo a check_admin_referer e scegliere 'activ-plugin_'. $ plugin per scrivere un'opzione che dice che è stata attivata e quindi eliminarla di nuovo al caricamento della pagina plugins.php. Forse l'opzione recent_activated può aiutarti? Potrebbe essere meglio servito come una nuova domanda @Omer
birgire
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.