Зміна за замовчуванням повідомлення "Плагін активовано"


11

Щоразу, коли адміністратор в WordPress активує плагін, після перезавантаження сторінки плагіна з’явиться повідомлення про успішне звітування про активацію "Плагін активований".

Знімок екрана повідомлення, активоване плагіном

Чи є спосіб змінити цей текст, який з’являється у повідомленні адміністратора, чи я повинен використовувати власне власне повідомлення? Крім того, якщо я повинен використовувати спеціальне повідомлення, чи придушить це повідомлення за замовчуванням "Активоване плагіном"?

Пов’язані запитання:

Дублікат:

Дякуємо Пітер за знахідку:

Додаткові ресурси:

Примітка

Зауважте, що хоч фільтр "gettext" застосовується лише під час викликів translate()функції, translate()він використовується практично всіма іншими функціями i18n в i18n.php . До них відносяться всі функції, перераховані тут, у цій публікації на темі «Синтаксис Gettext ».


Перейдіть і подивіться на це питання stackoverflow.com/q/14095642/1908141
Pieter Goosen

Відповіді:


14

Ви можете спробувати це:

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

щоб змінити повідомлення на свій смак:

переклали

Ми можемо вдосконалити це далі:

Якщо ви хочете лише активувати фільтр на /wp-admins/plugins.phpсторінці, замість цього ви можете використовувати наступне:

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

з:

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

де ми видаляємо зворотний виклик фільтра gettext, як тільки у нас є збіг.

Якщо ми хочемо перевірити кількість здійснених викликів gettext, перш ніж відповідати правильній рядку, ми можемо скористатися цим:

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

і я отримую 301дзвінки під час монтажу: 301

Я можу зменшити його лише до 10дзвінків:

10

додавши фільтр gettext всередині in_admin_headerгака, всередині load-plugins.phpгака:

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

Зауважте, що це не буде рахувати виклики gettext перед внутрішнім переадресацією, що використовується при активації плагінів.

Щоб активувати наш фільтр після внутрішнього переадресації, ми можемо перевірити параметри GET, які використовуються при активації плагінів:

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

і використовувати так:

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

у попередньому прикладі коду.


1
Ви прибили це, функція gettex. Відмінний хід
Пітер Гусен

Чому ви з'єднали разом is_admin () та add_filter () з логічним оператором &&? Чи відбувається якась оцінка короткого замикання, якщо користувач не адміністратор, то add_filter не запуститься?
gate_engineer

1
Відмінна відповідь! +1, і я поставив +1 для того, щоб стежити за роботою get_textфільтра.
кайзер

1
так, це повинно працювати аналогічно @blackhawk
birgire

1
Проблема - переспрямування. Перевірити параметр GET "плагін"? Якщо немає, можливо, підключіться до check_admin_referer та націліть на "activate-plugin_". $ plugin, щоб написати параметр, який говорить, що він активований, а потім видалити його знову при завантаженні сторінки plugins.php. Можливо, нещодавно активований варіант може допомогти? Можливо, краще буде подано нове запитання @Omer
birgire
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.