Ändern der Meldung "Plugin aktiviert" Standard

11

Immer wenn ein Administrator in WordPress ein Plugin aktiviert, wird beim erneuten Laden der Plugin-Seite nach erfolgreicher Aktivierung ein Hinweis angezeigt, der "Plugin aktiviert" meldet.

Screenshot der vom Plugin aktivierten Nachricht

Gibt es eine Möglichkeit, diesen Text zu ändern, der in der Administratorbenachrichtigung angezeigt wird, oder muss ich meine eigene benutzerdefinierte Nachricht verwenden? Wenn ich eine benutzerdefinierte Nachricht verwenden muss, wird dadurch die Standardnachricht "Plugin aktiviert" unterdrückt?

Verwandte Fragen:

Duplikat:

Danke an Pieter für den Fund:

Zusätzliche Ressourcen:

Hinweis

Denken Sie daran, dass der Filter 'gettext' zwar nur beim Aufrufen der translate()Funktion translate()angewendet wird, aber von praktisch allen anderen i18n-Funktionen in i18n.php verwendet wird . Dazu gehören alle Funktionen, die hier in diesem Beitrag zu " Gettext-Syntax " aufgeführt sind.

gate_engineer
quelle
Schauen Sie sich diese Frage an stackoverflow.com/q/14095642/1908141
Pieter Goosen

Antworten:

14

Sie können dies versuchen:

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

So ändern Sie die Nachricht nach Ihren Wünschen:

übersetzt

Wir können es weiter verfeinern:

Wenn Sie nur den Filter auf der /wp-admins/plugins.phpSeite aktivieren möchten , können Sie stattdessen Folgendes verwenden:

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

mit:

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

wo wir den Rückruf des gettext-Filters entfernen, sobald wir eine Übereinstimmung haben.

Wenn wir die Anzahl der getxt-gettext-Aufrufe überprüfen möchten, bevor wir mit der richtigen Zeichenfolge übereinstimmen, können wir Folgendes verwenden:

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

und ich bekomme 301Anrufe bei meiner Installation: 301

Ich kann es auf nur 10Anrufe reduzieren :

10

durch Hinzufügen des gettext-Filters innerhalb des in_admin_headerHooks, innerhalb des load-plugins.phpHooks:

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

Beachten Sie, dass dies die gettext-Aufrufe vor der internen Umleitung, die beim Aktivieren der Plugins verwendet wird, nicht zählt.

Um unseren Filter nach der internen Umleitung zu aktivieren, können wir die GET-Parameter überprüfen, die bei der Aktivierung von Plugins verwendet werden:

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

und verwenden Sie wie folgt:

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

im vorherigen Codebeispiel.

Birgire
quelle
1
Sie haben es geschafft, die gettex-Funktion. Ausgezeichneter Zug
Pieter Goosen
Warum haben Sie is_admin () und add_filter () mit einem logischen && -Operator verkettet? Gibt es eine Art Kurzschlussauswertung, bei der add_filter nicht ausgeführt wird, wenn der Benutzer kein Administrator ist?
gate_engineer
1
Hervorragende Antwort! +1 und +10, um die Leistung des get_textFilters im Auge zu behalten .
Kaiser
1
Ja, das sollte auf ähnliche Weise funktionieren. @blackhawk
birgire
1
Das Problem ist die Weiterleitung. GET-Parameter 'Plugin' prüfen? Wenn nicht verfügbar, haken Sie sich möglicherweise in check_admin_referer ein und wählen Sie 'activate-plugin_'. $ plugin, um eine Option zu schreiben, die besagt, dass sie aktiviert wurde, und sie dann beim Laden der Seite plugins.php erneut zu löschen. Vielleicht kann die kürzlich aktivierte Option helfen? Könnte besser als neue Frage @Omer
Birgire