Tampilkan smiley yang berbeda saat memasukkan ":)"

9

Jika Anda memasukkan :)di WordPress, itu secara otomatis menggantikannya dengan:

masukkan deskripsi gambar di sini

Apakah ada cara untuk menggunakan smiley yang berbeda untuk :)

Krish
sumber
Hai krish, dapatkah Anda memberikan detail lebih lanjut tentang apa yang sudah Anda coba (dan mengapa itu tidak berhasil)?
kraftner

Jawaban:

14

Mengganti emoji :) ke 😎

Konten smilies dikonversi dengan:

add_filter( 'the_content', 'convert_smilies' );

di mana bagian dari convert_smilies()fungsi ini sangat penting:

$content = preg_replace_callback( $wp_smiliessearch, 'translate_smiley', $content );

Jika kita mengintip ke dalam translate_smiley()maka kita menemukan yang berikut :

// Don't convert smilies that aren't images - they're probably emoji.
if ( ! in_array( $ext, $image_exts ) ) {
     return $img;
}

sebelum smilies_srcfilter diterapkan.

Jadi filter ini tidak tersedia untuk :)smiley.

Kami memiliki smilies yang diinisialisasi dengan:

add_action( 'init', 'smilies_init', 5 );

dan dalam deskripsi fungsi untuk smilies_init()kita dapat membaca yang berikut :

Plugin dapat menimpa daftar smiley default dengan mengatur $wpsmiliestrans ke array, dengan kunci kode blogger ketik dan nilai file gambar.

Inilah $wpsmiliestranssusunan global :

$wpsmiliestrans = array(
    ':mrgreen:' => 'mrgreen.png',
    ':neutral:' => "\xf0\x9f\x98\x90",
    ':twisted:' => "\xf0\x9f\x98\x88",
    ':arrow:' => "\xe2\x9e\xa1",
    ':shock:' => "\xf0\x9f\x98\xaf",
    ':smile:' => "\xf0\x9f\x99\x82",
    ':???:' => "\xf0\x9f\x98\x95",
    ':cool:' => "\xf0\x9f\x98\x8e",
    ':evil:' => "\xf0\x9f\x91\xbf",
    ':grin:' => "\xf0\x9f\x98\x80",
    ':idea:' => "\xf0\x9f\x92\xa1",
    ':oops:' => "\xf0\x9f\x98\xb3",
    ':razz:' => "\xf0\x9f\x98\x9b",
    ':roll:' => 'rolleyes.png',
    ':wink:' => "\xf0\x9f\x98\x89",
    ':cry:' => "\xf0\x9f\x98\xa5",
    ':eek:' => "\xf0\x9f\x98\xae",
    ':lol:' => "\xf0\x9f\x98\x86",
    ':mad:' => "\xf0\x9f\x98\xa1",
    ':sad:' => "\xf0\x9f\x99\x81",
    '8-)' => "\xf0\x9f\x98\x8e",
    '8-O' => "\xf0\x9f\x98\xaf",
    ':-(' => "\xf0\x9f\x99\x81",
    ':-)' => "\xf0\x9f\x99\x82",
    ':-?' => "\xf0\x9f\x98\x95",
    ':-D' => "\xf0\x9f\x98\x80",
    ':-P' => "\xf0\x9f\x98\x9b",
    ':-o' => "\xf0\x9f\x98\xae",
    ':-x' => "\xf0\x9f\x98\xa1",
    ':-|' => "\xf0\x9f\x98\x90",
    ';-)' => "\xf0\x9f\x98\x89",
    // This one transformation breaks regular text with frequency.
    //     '8)' => "\xf0\x9f\x98\x8e",
    '8O' => "\xf0\x9f\x98\xaf",
    ':(' => "\xf0\x9f\x99\x81",
    ':)' => "\xf0\x9f\x99\x82",
    ':?' => "\xf0\x9f\x98\x95",
    ':D' => "\xf0\x9f\x98\x80",
    ':P' => "\xf0\x9f\x98\x9b",
    ':o' => "\xf0\x9f\x98\xae",
    ':x' => "\xf0\x9f\x98\xa1",
    ':|' => "\xf0\x9f\x98\x90",
    ';)' => "\xf0\x9f\x98\x89",
    ':!:' => "\xe2\x9d\x97",
    ':?:' => "\xe2\x9d\x93",
);

atau tampilan ksorted yang lebih bagus:

Array
(
    [;-)] => 😉
    [;)] => 😉
    [:|] => 😐
    [:x] => 😡
    [:wink:] => 😉
    [:twisted:] => 😈
    [:smile:] => 🙂
    [:shock:] => 😯
    [:sad:] => 🙁
    [:roll:] => rolleyes.png
    [:razz:] => 😛
    [:oops:] => 😳
    [:o] => 😮
    [:neutral:] => 😐
    [:mrgreen:] => mrgreen.png
    [:mad:] => 😡
    [:lol:] => 😆
    [:idea:] => 💡
    [:grin:] => 😀
    [:evil:] => 👿
    [:eek:] => 😮
    [:cry:] => 😥
    [:cool:] => 😎
    [:arrow:] => 
    [:P] => 😛
    [:D] => 😀
    [:???:] => 😕
    [:?:] => 
    [:?] => 😕
    [:-|] => 😐
    [:-x] => 😡
    [:-o] => 😮
    [:-P] => 😛
    [:-D] => 😀
    [:-?] => 😕
    [:-)] => 🙂
    [:-(] => 🙁
    [:)] => 🙂
    [:(] => 🙁
    [:!:] => 
    [8O] => 😯
    [8-O] => 😯
    [8-)] => 😎
)

Jadi jika saya memahami dengan benar komentar inti di atas, maka kita dapat melakukan hal berikut:

/**
 * :) as the cool emoji
 */
add_action( 'init', function() use ( &$wpsmiliestrans )
{
    if( is_array( $wpsmiliestrans ) && get_option( 'use_smilies' ) )
        $wpsmiliestrans[':)'] = $wpsmiliestrans[':cool:'];

}, 6 );

tetapi ini hanya berfungsi untuk kunci smiley yang telah ditentukan, untuk $wp_smiliessearchbekerja.

Tapi saya tidak suka pendekatan yang disarankan ini, memodifikasi array global! Semoga ada satu lagi yang lebih baik!

Plugin demo - 🎅

Saya mencoba membuat aplikasi untuk ini. Saya tidak yakin apakah ini sudah ada, tetapi ini dia:

<?php
/**
 * Plugin Name: Santa's Smile In December
 * Description: Change the emoji of :) to the Santa Claus emoji, but only in December
 * Plugin URI:  https://wordpress.stackexchange.com/a/218496/26350
 */
add_action( 'init', function() use ( &$wpsmiliestrans )
{
    // :) as Santa Claus
    if( 
           is_array( $wpsmiliestrans ) 
        && get_option( 'use_smilies' ) 
        && 12 == current_time( 'n' ) 
    )
        $wpsmiliestrans[':)'] = "\xF0\x9F\x8E\x85";

}, 6 );

Terima kasih kepada Ismael Miguel atas komentar globalnya , saya menulis ulang cuplikannya.

Berikut baru dibuat tiket # 35.905 oleh Pieter Goosen , mengenai baru smilies_transfilter.

Perbarui - WordPress 4.7+

Filter baru akan tersedia di WordPress 4.7+, tetapi namanya smiliestidak smilies_trans.

Contoh kami di atas dapat ditulis sebagai:

add_filter( 'smilies', function( $smilies )
{
    if( isset( $smilies[':cool:'] ) )
        $smilies[':)'] = $smilies[':cool:'];

    return $smilies;
} );

atau secara eksplisit dengan:

add_filter( 'smilies', function( $smilies )
{
    $smilies[':)'] = "\xf0\x9f\x98\x8e";

    return $smilies;
} );

Plugin demo menjadi:

<?php
/**
 * Plugin Name: Santa's Smile In December
 * Description: Change the emoji of :) to the Santa Claus emoji, but only in December
 * Plugin URI:  https://wordpress.stackexchange.com/a/218496/26350
 */

add_filter( 'smilies', function( $smilies )
{
    // :) as Santa Claus
    if( get_option( 'use_smilies' ) && 12 == current_time( 'n' ) )
        $smilies[':)'] = "\xF0\x9F\x8E\x85";

    return $smilies;
} );

Kita tidak perlu dipusingkan dengan $wpsmiliestransarray global lagi!

birgire
sumber
Akankah smilies bekerja dengan setiap font?
rob_st
Aneh betapa berbedanya tampilan smiley antara tab dan pc saya. :-) Bagaimanapun, jip, juga tidak suka memodifikasi dengan global, tapi ini sepertinya yang terbaik yang akan Anda dapatkan dari kesepakatan ini. Saya pikir kita mungkin melihat ke dalam menambahkan filter yang tepat dalam inti yang dapat kita gunakan untuk memfilter smiley alih-alih mengubah global yang jelek. ;-)
Pieter Goosen
1
tiket trac # 35905 dikirimkan. Mari kita menyilangkan jari yang kita dapatkan filter yang tepat
Pieter Goosen
1
Bagaimana dengan add_action( 'init', function() use (&$wpsmiliestrans){ $wpsmiliestrans[':)'] = "\xf0\x9f\x98\x8e"; }, 6 );?
Ismael Miguel
1
Ini adalah janji - sebenarnya saya sering menggunakan usekata kunci dalam jawaban saya di sini, tetapi ini adalah pengingat yang baik mengenai global, terima kasih lagi (:) <- mungkin kita bisa menggunakan smiley simetris untuk aksesibilitas yang lebih baik untuk semua orang @IsmaelMiguel
birgire
3

Menurut Codex WordPress tentang penggunaan smilies :

Unggah gambar yang Anda inginkan dengan nama yang sama ke server Anda (katakanlah di wp-content / images / smilies) dan letakkan ini di function.php tema Anda:

add_filter ('smilies_src', 'my_custom_smilies_src', 10, 3);
   function my_custom_smilies_src ($ img_src, $ img, $ siteurl) {
       return $ siteurl. '/ wp-content / images / smilies /'.$ img;
   }
Itu akan menggantikan http://example.com/wp-includes/images/smilies/icon_question.gif dengan http://example.com/wp-content/images/smilies/icon_question.gif

rob_st
sumber
Tidak yakin mengapa demo Codex mengasumsikan 10 argumen input, bukan 3? Tapi saya pikir ini ditimpa oleh Emoji.
birgire
1
Saya kira itu dimaksudkan sebagai prioritas, sehingga urutannya keliru. Saya mengubahnya di Codex, berharap kami tidak salah :-)
rob_st
Saya telah memperbaiki hasil edit Anda dalam kodeks dan mengoreksi kode Anda dalam jawaban Anda. Argumen yang dibolehkan seharusnya 3, mengaturnya agar 1kode Anda gagal $img, $siteurlakan diabaikan dan karenanya tidak akan ditentukan dalam filter Anda :-)
Pieter Goosen