Zmiana komunikatu „Aktywowano wtyczkę” Domyślnie

11

Za każdym razem, gdy administrator WordPress aktywuje wtyczkę, po ponownym załadowaniu strony wtyczki pojawi się powiadomienie po udanej aktywacji, zgłaszając „Aktywowano wtyczkę”.

Zrzut ekranu wiadomości aktywowanej przez wtyczkę

Czy istnieje sposób na zmianę tego tekstu, który pojawia się w powiadomieniu administratora, czy też muszę użyć własnej wiadomości niestandardowej? Ponadto, jeśli muszę użyć niestandardowego komunikatu, czy to pominie domyślny komunikat „Aktywowano wtyczkę”?

Powiązane pytania:

Duplikować:

Podziękowania dla Pietera za znalezienie:

Dodatkowe zasoby:

Uwaga

Pamiętaj, że chociaż filtr „gettext” jest stosowany tylko podczas wywołań translate()funkcji, translate()jest używany przez praktycznie wszystkie inne funkcje i18n w i18n.php . Obejmują one wszystkie funkcje wymienione tutaj w tym poście w „ Składni Gettext ”.

bramka_inżynier
źródło
Idź i spójrz na to pytanie stackoverflow.com/q/14095642/1908141
Pieter Goosen

Odpowiedzi:

14

Możesz spróbować:

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

aby zmodyfikować wiadomość według własnych upodobań:

przetłumaczony

Możemy to udoskonalić:

Jeśli chcesz tylko aktywować filtr na /wp-admins/plugins.phpstronie, możesz zamiast tego użyć następujących opcji:

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

z:

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

gdzie usuwamy wywołanie zwrotne filtra gettext, gdy tylko mamy dopasowanie.

Jeśli chcemy sprawdzić liczbę wykonanych wywołań gettext, zanim dopasujemy prawidłowy ciąg, możemy użyć tego:

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

i odbieram 301połączenia podczas instalacji: 301

Mogę zredukować to do samych 10połączeń:

10

dodając filtr gettext w in_admin_headerhaku, w load-plugins.phphaku:

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

Zauważ, że nie policzy to wywołań gettext przed wewnętrznym przekierowaniem używanym podczas aktywacji wtyczek.

Aby aktywować nasz filtr po wewnętrznym przekierowaniu, możemy sprawdzić parametry GET używane podczas aktywacji wtyczek:

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

i użyj w ten sposób:

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

w poprzednim przykładzie kodu.

birgire
źródło
1
Przybiłeś go, funkcja gettex. Doskonały ruch
Pieter Goosen
Dlaczego połączyłeś is_admin () i add_filter () z operatorem logicznym &&? Czy trwa jakaś ocena zwarcia, jeśli użytkownik nie jest administratorem, to add_filter nie będzie działał?
gate_engineer
1
Doskonała odpowiedź! Daj +1, a ja dałem +10 za monitorowanie wydajności za pomocą get_textfiltra.
kaiser
1
tak, to powinno działać w podobny sposób @blackhawk
birgire
1
Problemem jest przekierowanie. Sprawdź parametr GET „wtyczki”? Jeśli nie jest dostępny, może podłączyć się do check_admin_referer i celować w „Activ-plugin_”. $ plugin, aby napisać opcję informującą, że została aktywowana, a następnie usunąć ją ponownie przy ładowaniu strony plugins.php. Może ostatnio aktywowana opcja może pomóc? Może lepiej służyć jako nowe pytanie @Omer
birgire