Alterando o padrão da mensagem "Plugin ativado"

11

Sempre que um administrador do WordPress ativar um plug-in, ao recarregar a página do plug-in, um aviso será exibido após o relatório de ativação bem-sucedido "Plugin ativado".

Captura de tela da mensagem de plug-in ativado

Existe uma maneira de alterar esse texto que aparece no aviso de administrador ou devo usar minha própria mensagem personalizada? Além disso, se eu precisar usar uma mensagem personalizada, isso suprimirá a mensagem padrão "Plugin ativado"?

Perguntas relacionadas:

Duplicado:

Agradecimentos a Pieter pela descoberta:

Recursos adicionais:

Nota

Lembre-se de que, embora o filtro 'gettext' seja aplicado apenas durante as chamadas para a translate()função, ele translate()é usado por praticamente todas as outras funções do i18n no arquivo i18n.php . Isso inclui todas as funções listadas aqui neste post na " Sintaxe Gettext ".

gate_engineer
fonte
Vá e dê uma olhada nesta pergunta stackoverflow.com/q/14095642/1908141
Pieter Goosen

Respostas:

14

Você pode tentar isso:

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 a mensagem ao seu gosto:

traduzido

Podemos refinar ainda mais:

Se você deseja ativar apenas o filtro na /wp-admins/plugins.phppágina, use o seguinte:

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

com:

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

onde removemos o retorno de chamada do filtro gettext assim que tivermos uma correspondência.

Se quisermos verificar o número de chamadas gettext feitas, antes de correspondermos à string correta, podemos usar isso:

/**
 * 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 recebo 301chamadas na minha instalação: 301

Eu posso reduzi-lo para apenas 10chamadas:

10

adicionando o filtro gettext dentro do in_admin_headergancho, dentro do load-plugins.phpgancho:

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

Observe que isso não conta as chamadas gettext antes do redirecionamento interno usado quando os plug-ins são ativados.

Para ativar nosso filtro após o redirecionamento interno, podemos verificar os parâmetros GET usados ​​quando os plugins são ativados:

/**
 * 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 use assim:

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

no exemplo de código anterior.

Birgire
fonte
1
Você acertou em cheio, a função gettex. Excelente jogada
Pieter Goosen
Por que você juntou is_admin () e add_filter () com um operador lógico &&? Existe algum tipo de avaliação de curto-circuito em que, se o usuário não for um administrador, o add_filter não será executado?
22814 gateelengineer
1
Excelente resposta! +1 e +10 para acompanhar o desempenho do get_textfiltro.
Kaiser
1
sim que deve funcionar de uma forma @blackhawk semelhante
birgire
1
O problema é o redirecionamento. Verifique o parâmetro GET 'plugin'? Se não estiver disponível, talvez conecte-se ao check_admin_referer e segmente 'enable-plugin_'. $ plugin para escrever uma opção que diz que foi ativada e exclua-a novamente no carregamento da página plugins.php. Talvez a opção recentemente ativada possa ajudar? Pode ser melhor servido como uma nova questão @Omer
birgire