Изменение сообщения «Плагин активирован» по умолчанию

11

Всякий раз, когда администратор в WordPress активирует плагин, после перезагрузки страницы плагина появляется сообщение об успешной активации, сообщающее «Плагин активирован».

Снимок экрана: активированный плагин

Есть ли способ изменить этот текст, который появляется в уведомлении администратора, или я должен использовать свое собственное сообщение? Кроме того, если я должен использовать пользовательское сообщение, будет ли это подавлять сообщение «Подключаемый модуль активирован» по умолчанию?

Смежные вопросы:

Дубликат:

Спасибо Питеру за находку:

Дополнительные ресурсы:

Заметка

Помните, что хотя фильтр gettext применяется только во время вызовов translate()функции, translate()он используется практически всеми другими функциями i18n в i18n.php . Они включают в себя все функции, перечисленные здесь в этом посте « Синтаксис Gettext ».

gate_engineer
источник
Иди и посмотри на этот вопрос stackoverflow.com/q/14095642/1908141
Питер Гусен

Ответы:

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

в предыдущем примере кода.

birgire
источник
1
Вы прибили это, функция gettex. Отличный ход
Питер Гусен
Почему вы связали вместе is_admin () и add_filter () с помощью логического оператора &&? Существует ли какая-то оценка короткого замыкания, когда пользователь, не являющийся администратором, не запускает add_filter?
gate_engineer
1
Отличный ответ! +1 и я бы +10 за то, чтобы следить за производительностью с get_textфильтром.
Кайзер
1
да, это должно работать аналогичным образом @blackhawk
birgire
1
Проблема в редиректе. Проверить параметр «Плагин» GET? Если не доступно, возможно, подключитесь к check_admin_referer и выберите цель «activ-plugin_». $ plugin, чтобы написать параметр, который говорит, что он был активирован, а затем снова удалить его при загрузке страницы plugins.php. Может быть, опция недавней активации может помочь? Может быть, лучше служить новым вопросом @Omer
birgire