Thay đổi Plugin Plugin được kích hoạt mặc định


11

Bất cứ khi nào quản trị viên trong WordPress kích hoạt plugin, khi tải lại trang plugin, một thông báo sẽ xuất hiện khi báo cáo kích hoạt thành công "Plugin được kích hoạt".

Ảnh chụp màn hình của Tin nhắn kích hoạt Plugin

Có cách nào để thay đổi văn bản này xuất hiện bên trong thông báo của quản trị viên hay tôi phải sử dụng tin nhắn tùy chỉnh của riêng mình? Ngoài ra, nếu tôi phải sử dụng một tin nhắn tùy chỉnh, điều này có ngăn chặn thông báo "Plugin được kích hoạt" mặc định không?

Câu hỏi liên quan:

Bản sao:

Cảm ơn Pieter vì đã tìm thấy:

Tài nguyên bổ sung:

Ghi chú

Hãy nhớ rằng mặc dù bộ lọc 'gettext' chỉ được áp dụng trong các cuộc gọi đến translate()hàm, nhưng translate()hầu như tất cả các hàm i18n khác trong i18n.php đều được sử dụng . Chúng bao gồm tất cả các chức năng được liệt kê ở đây trong bài đăng này trên " Cú pháp Gettext ".


Câu trả lời:


14

Bạn có thể thử điều này:

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

để sửa đổi tin nhắn theo ý thích của bạn:

dịch

Chúng ta có thể tinh chỉnh nó hơn nữa:

Nếu bạn chỉ muốn kích hoạt bộ lọc trên /wp-admins/plugins.phptrang, bạn có thể sử dụng như sau:

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

với:

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

nơi chúng tôi loại bỏ cuộc gọi lại bộ lọc gettext ngay sau khi chúng tôi có một trận đấu.

Nếu chúng tôi muốn kiểm tra số lượng cuộc gọi gettext được thực hiện, trước khi chúng tôi khớp đúng chuỗi, chúng tôi có thể sử dụng điều này:

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

và tôi nhận được 301cuộc gọi khi cài đặt: 301

Tôi có thể giảm chỉ còn 10các cuộc gọi:

10

bằng cách thêm bộ lọc gettext trong in_admin_headerhook, trong load-plugins.phphook:

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

Lưu ý rằng điều này sẽ không tính các cuộc gọi gettext trước khi chuyển hướng nội bộ được sử dụng khi các plugin được kích hoạt.

Để kích hoạt bộ lọc của chúng tôi sau khi chuyển hướng nội bộ, chúng tôi có thể kiểm tra các tham số GET được sử dụng khi plugin được kích hoạt:

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

và sử dụng như thế này:

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

trong ví dụ mã trước.


1
Bạn đóng đinh nó, chức năng gettex. Di chuyển tuyệt vời
Pieter Goosen

Tại sao bạn kết hợp is_admin () và add_filter () với toán tử && logic? Có một số loại đánh giá ngắn mạch đang diễn ra nếu người dùng không phải là quản trị viên, thì add_filter sẽ không chạy?
gate_engineer

1
Câu trả lời tuyệt vời! +1 và tôi +10 nó để theo dõi hiệu suất với get_textbộ lọc.
kaiser

1
vâng, nó sẽ hoạt động theo cách tương tự @blackhawk
birgire

1
Vấn đề là chuyển hướng. Kiểm tra tham số 'plugin' GET? Nếu không có sẵn, có thể móc vào check_admin_Vferer và nhắm mục tiêu 'activ-plugin_'. $ plugin để viết một tùy chọn cho biết nó đã được kích hoạt và sau đó xóa nó một lần nữa khi tải trang plugins.php. Có lẽ tùy chọn Recent_activated có thể giúp đỡ? Có thể được phục vụ tốt hơn như một câu hỏi mới @Omer
birgire
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.