Hiển thị mặt cười khác nhau khi nhập vào :)


9

Nếu bạn nhập :)vào WordPress, nó sẽ tự động thay thế bằng:

nhập mô tả hình ảnh ở đây

Có cách nào để sử dụng một nụ cười khác cho :)


Xin chào, bạn có thể cung cấp thêm chi tiết về những gì bạn đã thử (và tại sao nó không hoạt động)?
kraftner 22/2/2016

Câu trả lời:


14

Ghi đè biểu tượng cảm xúc của :) thành

Các mặt cười nội dung được chuyển đổi với:

add_filter( 'the_content', 'convert_smilies' );

trong đó phần này của convert_smilies()chức năng có tầm quan trọng:

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

Nếu chúng ta nhìn vào translate_smiley()thì chúng ta thấy như sau :

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

trước khi smilies_srcbộ lọc được áp dụng.

Vì vậy, bộ lọc này không có sẵn trong trường hợp :)mặt cười.

Chúng tôi có các mặt cười khởi tạo với:

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

và trong phần mô tả chức năng cho smilies_init()chúng ta có thể đọc như sau :

Các plugin có thể ghi đè danh sách mặt cười mặc định bằng cách đặt $wpsmiliestrans thành một mảng, với mã là mã mà blogger nhập vào và giá trị của tệp hình ảnh.

Đây là $wpsmiliestransmảng toàn cầu :

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

hoặc màn hình ksort đẹp hơn:

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

Vì vậy, nếu tôi hiểu chính xác nhận xét cốt lõi ở trên, thì chúng ta có thể làm như sau:

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

}, 6 );

nhưng điều này chỉ hoạt động cho các phím cười được xác định trước, $wp_smiliessearchđể làm việc.

Nhưng tôi không thích cách tiếp cận được đề xuất này, sửa đổi mảng toàn cầu! Hy vọng có một cái khác tốt hơn!

Plugin demo -

Tôi đã cố gắng đưa ra một ứng dụng cho việc này. Tôi không chắc điều này đã tồn tại chưa, nhưng đây là:

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

Cảm ơn Ismael Miguel về nhận xét toàn cầu , tôi đã viết lại đoạn trích cho phù hợp.

Đây là vé mới được tạo # 35905 của Pieter Goosen , liên quan đến smilies_transbộ lọc mới .

Cập nhật - WordPress 4.7+

Bộ lọc mới sẽ có sẵn trong WordPress 4.7+, nhưng tên của nó sẽ smilieskhông có smilies_trans.

Các ví dụ trên của chúng tôi có thể được viết là:

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

    return $smilies;
} );

hoặc rõ ràng với:

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

    return $smilies;
} );

Plugin demo trở thành:

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

Chúng ta không cần phải loay hoay với $wpsmiliestransmảng toàn cầu nữa!


Những nụ cười sẽ làm việc với mọi phông chữ sau đó?
rob_st

Thật kỳ lạ khi các mặt cười trông khác nhau giữa tab và pc của tôi. :-) Dù sao, jip, cũng không thích sửa đổi xung quanh với toàn cầu, nhưng điều này có vẻ như là điều tốt nhất bạn sẽ thoát khỏi thỏa thuận này. Tôi nghĩ rằng chúng ta có thể xem xét thêm một bộ lọc thích hợp trong lõi mà chúng ta có thể sử dụng để lọc các mặt cười thay vì thay đổi một toàn cầu tào lao. ;-)
Pieter Goosen

1
vé trac # 35905 đã nộp. Cho phép các ngón tay bắt chéo mà chúng ta có được một bộ lọc thích hợp
Pieter Goosen 22/2/2016

1
Thế còn add_action( 'init', function() use (&$wpsmiliestrans){ $wpsmiliestrans[':)'] = "\xf0\x9f\x98\x8e"; }, 6 );?
Ismael Miguel

1
Đó là một lời hứa - thực ra tôi sử dụng usetừ khóa rất nhiều trong các câu trả lời của mình ở đây, nhưng đó là một lời nhắc tốt về toàn cầu, cảm ơn một lần nữa (:) <- có lẽ chúng ta có thể sử dụng một nụ cười đối xứng để có thể truy cập tốt hơn cho mọi người @IsmaelMiguel
birgire

3

Theo Codex WordPress về việc sử dụng mặt cười :

Tải hình ảnh bạn muốn có cùng tên lên máy chủ của bạn (giả sử trong wp-content / hình ảnh / mặt cười) và đặt hình ảnh này vào chức năng của chủ đề của bạn.php:

add_filter ('smflower_src', 'my_custom_smflower_src', 10, 3);
   chức năng my_custom_smflower_src ($ img_src, $ img, $ siteurl) {
       trả lại $ siteurl. '/ wp-content / hình ảnh / mặt cười /'.$ img;
   }
Điều đó sẽ thay thế http://example.com/wp-includes/images/smflower/icon_question.gif bằng http://example.com/wp-content/images/smflower/icon_question.gif


Không chắc chắn lý do tại sao bản demo Codex giả định 10 đối số đầu vào, thay vì 3? Nhưng tôi nghĩ điều này bị quá tải bởi các biểu tượng cảm xúc.
bạch dương

1
Tôi cho rằng nó có nghĩa là ưu tiên, vì vậy thứ tự có vẻ không chính xác. Tôi đã thay đổi nó trong Codex, hy vọng chúng tôi đã không hiểu sai :-)
rob_st

Tôi đã sửa lỗi chỉnh sửa của bạn trong codex và sửa mã của bạn trong câu trả lời của bạn. Những lập luận cho phép nên 3, đặt nó vào 1sẽ thất bại mã của bạn như $img, $siteurlsẽ bị bỏ qua và do sẽ được định nghĩa trong bộ lọc của bạn :-)
Pieter Goosen
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.