Modification du message par défaut «Plugin activé»

11

Chaque fois qu'un administrateur dans WordPress active un plugin, lors du rechargement de la page du plugin, une notification apparaîtra lors de l'activation réussie signalant "Plugin activé".

Capture d'écran du message Plugin Activated

Existe-t-il un moyen de modifier ce texte qui apparaît dans l'avis d'administration, ou dois-je utiliser mon propre message personnalisé? De plus, si je dois utiliser un message personnalisé, cela supprimera-t-il le message par défaut "Plugin activé"?

Questions connexes:

Dupliquer:

Merci à Pieter pour la découverte:

Ressources additionnelles:

Remarque

Rappelez-vous que bien que le filtre «gettext» ne soit appliqué que pendant les appels à la translate()fonction, il translate()est utilisé par pratiquement toutes les autres fonctions i18n dans i18n.php . Ceux-ci incluent toutes les fonctions répertoriées ici dans cet article sur " Gettext Syntax ".

gate_engineer
la source
Allez jeter un œil à cette question stackoverflow.com/q/14095642/1908141
Pieter Goosen

Réponses:

14

Vous pouvez essayer ceci:

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

pour modifier le message à votre guise:

traduit

Nous pouvons l'affiner davantage:

Si vous souhaitez uniquement activer le filtre sur la /wp-admins/plugins.phppage, vous pouvez utiliser les éléments suivants à la place:

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

avec:

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

où nous supprimons le rappel du filtre gettext dès que nous avons une correspondance.

Si nous voulons vérifier le nombre d'appels gettext effectués, avant de faire correspondre la chaîne correcte, nous pouvons utiliser ceci:

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

et je reçois des 301appels sur mon installation: 301

Je peux le réduire aux seuls 10appels:

dix

en ajoutant le filtre gettext dans le in_admin_headercrochet, dans le load-plugins.phpcrochet:

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

Notez que cela ne comptera pas les appels gettext avant la redirection interne utilisée lorsque les plugins sont activés.

Pour activer notre filtre après la redirection interne, nous pouvons vérifier les paramètres GET utilisés lorsque les plugins sont activés:

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

et utiliser comme ceci:

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

dans l'exemple de code précédent.

Birgire
la source
1
Vous l'avez cloué, la fonction gettex. Excellent coup
Pieter Goosen
Pourquoi avez-vous enchaîné is_admin () et add_filter () avec un opérateur logique &&? Existe-t-il une sorte d'évaluation de court-circuit où, si l'utilisateur n'est pas administrateur, add_filter ne s'exécutera pas?
gate_engineer
1
Excellente réponse! +1 et je l'ai +10 pour garder un œil sur les performances avec le get_textfiltre.
kaiser
1
oui cela devrait fonctionner de la même manière @blackhawk
birgire
1
Le problème est la redirection. Vérifiez le paramètre GET «plugin»? S'il n'est pas disponible, connectez-vous à check_admin_referer et ciblez «activate-plugin_». $ plugin pour écrire une option qui dit qu'elle a été activée, puis supprimez-la à nouveau lors du chargement de la page plugins.php. Peut-être que l'option récemment_activée peut vous aider? Pourrait être mieux servi comme nouvelle question @Omer
birgire