更改“插件激活”消息默认值


11

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

插件激活消息的屏幕截图

是否可以更改显示在管理通知中的文本,还是必须使用自己的自定义消息?另外,如果我必须使用自定义消息,这是否将取消默认的“插件激活”消息?

相关问题:

重复:

感谢Pieter的发现:

其他资源:

注意

请记住,尽管“ gettext”过滤器仅在translate()函数调用期间translate()应用,但实际上i18n.php中的所有其他i18n函数都使用该过滤器。这些包括本文“ Gettext语法 ”中此处列出的所有功能。


Answers:


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

通过在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 );

在前面的代码示例中。


1
您已将其固定为gettex函数。出色举动
Pieter Goosen 2014年

为什么用逻辑&&运算符将is_admin()和add_filter()链接在一起?是否存在某种短路评估,如果用户不是管理员,那么add_filter将不会运行?
gate_engineer 2014年

1
很好的答案!+1,而我则+10,以密切关注get_text滤镜的性能。
kaiser 2014年

1
是的,应该以类似的方式工作@blackhawk
birgire 16-10-15

1
问题是重定向。检查“插件” GET参数?如果不可用,则可以连接到check_admin_referer并定位'activate-plugin_'。$ plugin编写一个选项,说它已被激活,然后在plugins.php页面加载时再次将其删除。也许最近激活的选项可以帮助您?最好将其作为新问题@Omer
birgire
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.