Câu trả lời:
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_src
bộ 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à $wpsmiliestrans
mả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!
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_trans
bộ lọc mới .
Bộ lọc mới sẽ có sẵn trong WordPress 4.7+, nhưng tên của nó sẽ smilies
khô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 $wpsmiliestrans
mảng toàn cầu nữa!
add_action( 'init', function() use (&$wpsmiliestrans){ $wpsmiliestrans[':)'] = "\xf0\x9f\x98\x8e"; }, 6 );
?
use
từ 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
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
3
, đặt nó vào 1
sẽ thất bại mã của bạn như $img
, $siteurl
sẽ bị bỏ qua và do sẽ được định nghĩa trong bộ lọc của bạn :-)