问题描述

每当 WordPress 中的管理员激活插件时,在重新加载插件页面时,成功启动报告”Plugin Activated” 后会显示一条通知。

有没有办法更改出现在管理通知中的文本,还是必须使用我自己的自定义消息?另外,如果我必须使用自定义消息,这会抑制默认的”Plugin Activated” 消息吗?

相关问题:

重复:

感谢 Pieter 的发现:

其他资源:

Note

Rememember that although ‘gettext’ filter is only applied during calls to the translate() function, translate() is used by virtually all other i18n functions in i18n.php. These include all of the functions listed here in this post on “Gettext Syntax“.

最佳解决方案

你可以试试这个:

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 调用我的安装:

我可以把它减少到只有 10 调用:

通过在 in_admin_header 钩子中添加 gettext 过滤器,在 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 );

在前面的代码示例中。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。