Mengubah Default Pesan "Plugin Diaktifkan"

11

Setiap kali seorang administrator di WordPress mengaktifkan sebuah plugin, pada saat memuat ulang halaman plugin, sebuah pemberitahuan akan muncul setelah pelaporan aktivasi yang berhasil "Plugin Diaktifkan".

Cuplikan layar pesan Diaktifkan Plugin

Apakah ada cara untuk mengubah teks ini yang muncul di dalam pemberitahuan admin, atau haruskah saya menggunakan pesan khusus saya sendiri? Selain itu, jika saya harus menggunakan pesan khusus, apakah ini akan menekan pesan "Plugin Activated" default?

Pertanyaan-pertanyaan Terkait:

Duplikat:

Terima kasih kepada Pieter untuk penemuannya:

Sumber daya tambahan:

Catatan

Ingat bahwa meskipun filter 'gettext' hanya diterapkan selama panggilan ke translate()fungsi, translate()digunakan oleh hampir semua fungsi i18n lainnya di i18n.php . Ini termasuk semua fungsi yang tercantum di sini dalam posting ini di " Sintaks Gettext ".

gate_engineer
sumber
Pergi dan lihat pertanyaan ini stackoverflow.com/q/14095642/1908141
Pieter Goosen

Jawaban:

14

Anda dapat mencoba ini:

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

untuk mengubah pesan sesuai keinginan Anda:

diterjemahkan

Kami dapat memperbaikinya lebih lanjut:

Jika Anda hanya ingin mengaktifkan filter pada /wp-admins/plugins.phphalaman, Anda dapat menggunakan yang berikut:

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

dengan:

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

tempat kami menghapus panggilan balik filter gettext segera setelah kami menemukan kecocokan.

Jika kami ingin memeriksa jumlah panggilan gettext yang dibuat, sebelum kami mencocokkan string yang benar, kami dapat menggunakan ini:

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

dan saya mendapat 301panggilan di instalasi saya: 301

Saya bisa menguranginya menjadi hanya 10panggilan:

10

dengan menambahkan filter gettext di dalam in_admin_headerhook, di dalam load-plugins.phphook:

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

Perhatikan bahwa ini tidak akan menghitung panggilan gettext sebelum pengalihan internal digunakan ketika plugin diaktifkan.

Untuk mengaktifkan filter kami setelah pengalihan internal, kami dapat memeriksa parameter GET yang digunakan ketika plugin diaktifkan:

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

dan gunakan seperti ini:

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

dalam contoh kode sebelumnya.

birgire
sumber
1
Anda berhasil, fungsi gettex. Langkah luar biasa
Pieter Goosen
Mengapa Anda menghubungkan bersama is_admin () dan add_filter () dengan operator && yang logis? Apakah ada semacam evaluasi hubung singkat yang terjadi di mana jika pengguna bukan administrator, maka add_filter tidak akan berjalan?
gate_engineer
1
Jawaban yang sangat bagus! +1 dan saya beri +10 untuk mengawasi kinerja dengan get_textfilter.
kaiser
1
ya itu seharusnya bekerja dengan cara yang sama @blackhawk
birgire
1
Masalahnya adalah pengalihan. Periksa parameter GET 'plugin'? Jika tidak tersedia mungkin terhubung ke check_admin_referer dan target 'activ-plugin_'. $ plugin untuk menulis opsi yang mengatakan itu telah diaktifkan dan kemudian menghapusnya lagi di halaman memuat plugins.php. Mungkin opsi yang baru saja diaktifkan dapat membantu? Lebih baik disajikan sebagai pertanyaan baru @Omer
birgire