Antworten:
Die Inhalts-Smilies werden konvertiert mit:
add_filter( 'the_content', 'convert_smilies' );
wo dieser Teil der convert_smilies()
Funktion von Bedeutung ist:
$content = preg_replace_callback( $wp_smiliessearch, 'translate_smiley', $content );
Wenn wir hineinschauen translate_smiley()
, finden wir Folgendes :
// Don't convert smilies that aren't images - they're probably emoji.
if ( ! in_array( $ext, $image_exts ) ) {
return $img;
}
bevor der smilies_src
Filter angewendet wird.
Daher ist dieser Filter beim :)
Smiley nicht verfügbar .
Wir haben die Smilies initialisiert mit:
add_action( 'init', 'smilies_init', 5 );
und innerhalb der Funktionsbeschreibung für können smilies_init()
wir folgendes lesen :
Plugins können die Standard-Smiley-Liste überschreiben, indem sie
$wpsmiliestrans
auf ein Array setzen, mit dem Schlüssel den Code, den der Blogger eingibt, und dem Wert der Bilddatei.
Hier ist das globale $wpsmiliestrans
Array:
$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",
);
oder das schönere ksortierte Display:
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-)] => 😎
)
Wenn ich den obigen Kernkommentar richtig verstehe, können wir Folgendes tun:
/**
* :) as the cool emoji
*/
add_action( 'init', function() use ( &$wpsmiliestrans )
{
if( is_array( $wpsmiliestrans ) && get_option( 'use_smilies' ) )
$wpsmiliestrans[':)'] = $wpsmiliestrans[':cool:'];
}, 6 );
Dies funktioniert jedoch nur für vordefinierte Smiley-Schlüssel, damit $wp_smiliessearch
diese funktionieren.
Aber ich mag diesen vorgeschlagenen Ansatz nicht, das globale Array zu modifizieren! Hoffentlich gibt es noch einen besseren!
Ich habe versucht, eine Bewerbung dafür zu finden. Ich bin nicht sicher, ob dies bereits existiert, aber hier ist es:
<?php
/**
* Plugin Name: Santa's Smile In December
* Description: Change the emoji of :) to the Santa Claus emoji, but only in December
* Plugin URI: /wordpress//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 );
Dank Ismael Miguel für den globalen Kommentar habe ich die Schnipsel entsprechend umgeschrieben.
Hier ist das neu erstellte Ticket # 35905 von Pieter Goosen zu einem neuen smilies_trans
Filter.
Der neue Filter wird in WordPress 4.7+ verfügbar sein, der Name jedoch smilies
nicht smilies_trans
.
Unsere obigen Beispiele können wie folgt geschrieben werden:
add_filter( 'smilies', function( $smilies )
{
if( isset( $smilies[':cool:'] ) )
$smilies[':)'] = $smilies[':cool:'];
return $smilies;
} );
oder explizit mit:
add_filter( 'smilies', function( $smilies )
{
$smilies[':)'] = "\xf0\x9f\x98\x8e";
return $smilies;
} );
Das Demo-Plugin wird:
<?php
/**
* Plugin Name: Santa's Smile In December
* Description: Change the emoji of :) to the Santa Claus emoji, but only in December
* Plugin URI: /wordpress//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;
} );
Wir müssen nicht $wpsmiliestrans
mehr mit dem globalen Array herumspielen!
add_action( 'init', function() use (&$wpsmiliestrans){ $wpsmiliestrans[':)'] = "\xf0\x9f\x98\x8e"; }, 6 );
?
use
Schlüsselwort häufig in meinen Antworten hier, aber es ist eine gute Erinnerung an die Globals, nochmals vielen Dank (:) <- vielleicht könnten wir einen symmetrischen Smiley für eine bessere Zugänglichkeit für alle verwenden @IsmaelMiguel
Laut dem WordPress-Codex zur Verwendung von Smilies :
Laden Sie die gewünschten Bilder mit demselben Namen auf Ihren Server hoch (z. B. in wp-content / images / smilies) und fügen Sie diese in die function.php Ihres Themas ein:
add_filter ('smilies_src', 'my_custom_smilies_src', 10, 3); Funktion my_custom_smilies_src ($ img_src, $ img, $ siteurl) { return $ siteurl. '/ wp-content / images / smilies /'.$ img; }}Dadurch wird http://example.com/wp-includes/images/smilies/icon_question.gif durch http://example.com/wp-content/images/smilies/icon_question.gif ersetzt
3
, wenn Sie 1
festlegen, dass Ihr Code als fehlschlägt $img
, $siteurl
ignoriert wird und daher in Ihrem Filter undefiniert ist :-)