แสดงยิ้มต่าง ๆ เมื่อเข้าสู่“ :)”


9

ถ้าคุณใส่:)ใน WordPress มันจะแทนที่ด้วย:

ป้อนคำอธิบายรูปภาพที่นี่

มีวิธีใช้ยิ้มต่าง ๆ สำหรับ :)


สวัสดีคริสคุณช่วยให้รายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่คุณได้ลองไปแล้ว (และทำไมมันไม่ทำงาน)
Kraftner

คำตอบ:


14

เอาชนะอีโมจิของ :) ถึง😎

รอยยิ้มเนื้อหาจะถูกแปลงด้วย:

add_filter( 'the_content', 'convert_smilies' );

ที่ส่วนนี้ของconvert_smilies()ฟังก์ชั่นมีความสำคัญ:

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

หากเรามองเข้าไปtranslate_smiley()เราจะพบสิ่งต่อไปนี้ :

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

ก่อนที่จะใช้smilies_srcตัวกรอง

ดังนั้นตัวกรองนี้จึงไม่สามารถใช้งานได้ในกรณีที่มี:)ยิ้ม

เรามีรอยยิ้มเริ่มต้นด้วย:

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

และภายในคำอธิบายฟังก์ชั่นสำหรับsmilies_init()เราสามารถอ่านต่อไปนี้ :

ปลั๊กอินอาจแทนที่รายการยิ้มเริ่มต้นโดยการตั้งค่า$wpsmiliestrans เป็นอาเรย์โดยใส่รหัสที่ประเภทของบล็อกเกอร์และค่าของไฟล์รูปภาพ

นี่คือ$wpsmiliestransอาร์เรย์ทั่วโลก:

$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",
);

หรือจอแสดงผล nicer ksorted:

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-)] => 😎
)

ดังนั้นหากฉันเข้าใจความคิดเห็นหลักข้างต้นอย่างถูกต้องจากนั้นเราสามารถทำสิ่งต่อไปนี้:

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

}, 6 );

แต่จะใช้ได้เฉพาะกับปุ่มยิ้มที่กำหนดไว้ล่วงหน้าเท่านั้นสำหรับการ$wp_smiliessearchทำงาน

แต่ฉันไม่ชอบวิธีที่แนะนำนี้ปรับเปลี่ยนอาร์เรย์ทั่วโลก! หวังว่าจะมีอีกอย่างหนึ่งที่ดีกว่า!

ปลั๊กอินสาธิต - 🎅

ฉันพยายามหาแอพพลิเคชั่นนี้ ฉันไม่แน่ใจว่าสิ่งนี้มีอยู่แล้ว แต่นี่คือ:

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

ขอบคุณIsmael Miguelสำหรับความคิดเห็นทั่วโลกฉันเขียนตัวอย่างใหม่อีกครั้ง

นี่คือตั๋ว# 35905 ที่สร้างขึ้นใหม่โดยPieter Goosenเกี่ยวกับตัวกรองใหม่smilies_trans

อัพเดท - WordPress 4.7+

ตัวกรองใหม่จะพร้อมใช้งานใน WordPress 4.7+ แต่ชื่อจะ smiliesไม่smilies_transใช้

ตัวอย่างด้านบนของเราสามารถเขียนเป็น:

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

    return $smilies;
} );

หรืออย่างชัดเจนด้วย:

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

    return $smilies;
} );

ปลั๊กอินสาธิตกลายเป็น:

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

เราไม่จำเป็นต้องยุ่งกับ$wpsmiliestransอาร์เรย์ทั่วโลกอีกต่อไป!


รอยยิ้มจะใช้ได้กับทุกตัวอักษรหรือไม่
rob_st

แปลกว่ารอยยิ้มจะดูแตกต่างกันระหว่างแท็บของฉันกับพีซีอย่างไร :-) ยังไงก็ตาม, jip, ก็ไม่ชอบการแก้ไขด้วย globals, แต่ดูเหมือนว่าดีที่สุดที่คุณจะได้รับจากข้อตกลงนี้ ฉันคิดว่าเราอาจพิจารณาเพิ่มตัวกรองที่เหมาะสมในแกนซึ่งเราสามารถใช้เพื่อกรองรอยยิ้มแทนการเปลี่ยนโลกที่เส็งเคร็ง ;-)
Pieter Goosen

1
ส่งตั๋ว trac # 35905แล้ว ให้ข้ามนิ้วที่เราได้รับตัวกรองที่เหมาะสม
Pieter Goosen

1
แล้วไงadd_action( 'init', function() use (&$wpsmiliestrans){ $wpsmiliestrans[':)'] = "\xf0\x9f\x98\x8e"; }, 6 );ล่ะ
Ismael Miguel

1
มันเป็นสัญญา - จริง ๆ แล้วฉันใช้useคำสำคัญมากมายในคำตอบของฉันที่นี่ แต่เป็นคำเตือนที่ดีเกี่ยวกับรูปดาวขอบคุณอีกครั้ง (:) <- บางทีเราอาจใช้รูปสมมาตรยิ้มสำหรับการเข้าถึงที่ดีกว่าสำหรับทุกคน @IsmaelMiguel
birgire

3

ตามWordPress Codex เกี่ยวกับการใช้ smilies :

อัปโหลดภาพที่คุณต้องการด้วยชื่อเดียวกันไปยังเซิร์ฟเวอร์ของคุณ (พูดใน wp-content / images / smilies) และใส่ลงใน function.php ของธีมของคุณ:

add_filter ('smilies_src', 'my_custom_smilies_src', 10, 3);
   ฟังก์ชัน my_custom_smilies_src ($ img_src, $ img, $ siteurl) {
       ส่งคืน $ siteurl '/ wp-content / images / smilies /'.$ img;
   }
ที่จะเข้ามาแทนที่http://example.com/wp-includes/images/smilies/icon_question.gifกับhttp://example.com/wp-content/images/smilies/icon_question.gif


ไม่แน่ใจว่าทำไมการสาธิต Codex สมมติว่ามีอาร์กิวเมนต์ 10 อินพุตแทนที่จะเป็น 3 แต่ฉันคิดว่านี่มันเกินความจริงสำหรับ Emoji
Birgire

1
ฉันคิดว่ามันควรจะเป็นลำดับความสำคัญดังนั้นลำดับดูเหมือนไม่ถูกต้อง ฉันเปลี่ยนมันใน Codex หวังว่าเราจะไม่เข้าใจผิด :-)
rob_st

ฉันได้แก้ไขการแก้ไขของคุณใน codex และแก้ไขรหัสของคุณในคำตอบของคุณ ข้อโต้แย้งได้รับอนุญาตควรจะ3ตั้งค่ามัน1จะล้มเหลวรหัสของคุณเป็น $img, $siteurlจะได้รับการละเว้นและดังนั้นจะไม่ได้กำหนดในตัวกรองของคุณ :-)
ปีเตอร์ Goosen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.