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_src
filtra.
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
$wpsmiliestrans
tablicę, z kluczem, w którym wpisuje się blogger, i wartością pliku obrazu.
Oto globalna $wpsmiliestrans
tablica:
$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_smiliessearch
aby 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_trans
filtra.
Nowy filtr będzie dostępny w WordPress 4.7+, ale to imię będzie smilies
nie 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ą $wpsmiliestrans
tablicą!
add_action( 'init', function() use (&$wpsmiliestrans){ $wpsmiliestrans[':)'] = "\xf0\x9f\x98\x8e"; }, 6 );
?
use
sł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
3
ustawienie go 1
zawiedzie kod jak $img
, $siteurl
będą ignorowane i będzie dla nich być zdefiniowana w filtrze :-)