Odpowiedzi:
Emotikony treści są konwertowane za pomocą:
add_filter( 'the_content', 'convert_smilies' );
gdzie ta część z convert_smilies()funkcji ma znaczenie:
$content = preg_replace_callback( $wp_smiliessearch, 'translate_smiley', $content );
Jeśli zajrzymy do niego translate_smiley(), znajdziemy następujące :
// Don't convert smilies that aren't images - they're probably emoji.
if ( ! in_array( $ext, $image_exts ) ) {
return $img;
}
przed zastosowaniem smilies_srcfiltra.
Więc ten filtr nie jest dostępny w przypadku :)buźki.
Uśmieszki zainicjowaliśmy za pomocą:
add_action( 'init', 'smilies_init', 5 );
oraz w opisie funkcji dla smilies_init()możemy przeczytać następujące :
Wtyczki mogą zastąpić domyślną listę emotikonów, ustawiając na
$wpsmiliestranstablicę, z kluczem, w którym wpisuje się blogger, i wartością pliku obrazu.
Oto globalna $wpsmiliestranstablica:
$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",
);
lub ładniejszy ksorted wyświetlacz:
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-)] => 😎
)
Więc jeśli poprawnie zrozumiem powyższy podstawowy komentarz, moglibyśmy wykonać następujące czynności:
/**
* :) as the cool emoji
*/
add_action( 'init', function() use ( &$wpsmiliestrans )
{
if( is_array( $wpsmiliestrans ) && get_option( 'use_smilies' ) )
$wpsmiliestrans[':)'] = $wpsmiliestrans[':cool:'];
}, 6 );
ale działa to tylko w przypadku predefiniowanych emotikonów, $wp_smiliessearchaby działały.
Ale nie podoba mi się to sugerowane podejście, modyfikujące globalną tablicę! Mam nadzieję, że jest jeszcze jeden lepszy!
Próbowałem wymyślić taką aplikację. Nie jestem pewien, czy to już istnieje, ale oto:
<?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 );
Dzięki Ismaelowi Miguelowi za komentarz globalny przepisałem odpowiednio fragmenty kodu .
Oto nowo utworzony bilet nr 35905 autorstwa Pietera Goosena dotyczący nowego smilies_transfiltra.
Nowy filtr będzie dostępny w WordPress 4.7+, ale to imię będzie smiliesnie smilies_trans.
Nasze powyższe przykłady można zapisać jako:
add_filter( 'smilies', function( $smilies )
{
if( isset( $smilies[':cool:'] ) )
$smilies[':)'] = $smilies[':cool:'];
return $smilies;
} );
lub wyraźnie za pomocą:
add_filter( 'smilies', function( $smilies )
{
$smilies[':)'] = "\xf0\x9f\x98\x8e";
return $smilies;
} );
Wtyczka demonstracyjna staje się:
<?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;
} );
Nie musimy już więcej bawić się z globalną $wpsmiliestranstablicą!
add_action( 'init', function() use (&$wpsmiliestrans){ $wpsmiliestrans[':)'] = "\xf0\x9f\x98\x8e"; }, 6 );?
usesłowa kluczowego w moich odpowiedziach tutaj, ale to dobre przypomnienie dotyczące globaliów, jeszcze raz dziękuję (:) <- może moglibyśmy użyć symetrycznej buźki dla lepszej dostępności dla wszystkich @IsmaelMiguel
Zgodnie z kodeksem WordPress dotyczącym używania emotikonów :
Prześlij zdjęcia o tej samej nazwie na swój serwer (powiedzmy w wp-content / images / smilies) i umieść to w funkcji theme.php:
add_filter ('smilies_src', 'my_custom_smilies_src', 10, 3); funkcja my_custom_smilies_src ($ img_src, $ img, $ siteurl) { return $ siteurl. '/ wp-content / images / smilies /'.$ img; }To zastąpi http://example.com/wp-include/images/smilies/icon_question.gif z http://example.com/wp-content/images/smilies/icon_question.gif
3ustawienie go 1zawiedzie kod jak $img, $siteurlbędą ignorowane i będzie dla nich być zdefiniowana w filtrze :-)