Zeigen Sie einen anderen Smiley an, wenn Sie ":)" eingeben.

9

Wenn Sie :)in WordPress eingeben , wird es automatisch ersetzt durch:

Geben Sie hier die Bildbeschreibung ein

Gibt es eine Möglichkeit, einen anderen Smiley für das zu verwenden? :)

krish
quelle
Hallo krish, könntest du mehr Details darüber geben, was du bereits versucht hast (und warum es nicht funktioniert hat)?
Kraftner

Antworten:

14

Überschreiben des Emoji von :) zu 😎

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_srcFilter 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 $wpsmiliestransArray:

$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_smiliessearchdiese funktionieren.

Aber ich mag diesen vorgeschlagenen Ansatz nicht, das globale Array zu modifizieren! Hoffentlich gibt es noch einen besseren!

Demo-Plugin - 🎅

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_transFilter.

Update - WordPress 4.7+

Der neue Filter wird in WordPress 4.7+ verfügbar sein, der Name jedoch smiliesnicht 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 $wpsmiliestransmehr mit dem globalen Array herumspielen!

Birgire
quelle
Würden die Smilies dann mit jeder Schriftart funktionieren?
Rob_st
Seltsam, wie unterschiedlich die Smileys zwischen meinem Tab und meinem PC aussehen. :-) Wie auch immer, jip, mag es auch nicht, mit Globals zu modifizieren, aber das scheint das Beste zu sein, was du aus diesem Deal herausholen wirst. Ich denke, wir könnten versuchen, einen geeigneten Filter im Kern hinzuzufügen, mit dem wir Smileys filtern können, anstatt eine beschissene globale zu ändern. ;-)
Pieter Goosen
1
Trac Ticket # 35905 eingereicht. Drücken wir die Daumen, dass wir einen richtigen Filter bekommen
Pieter Goosen
1
Wie wäre es add_action( 'init', function() use (&$wpsmiliestrans){ $wpsmiliestrans[':)'] = "\xf0\x9f\x98\x8e"; }, 6 );?
Ismael Miguel
1
Es ist ein Versprechen - eigentlich verwende ich das useSchlü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
birgire
3

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

rob_st
quelle
Sie sind sich nicht sicher, warum die Codex-Demo 10 Eingabeargumente anstelle von 3 annimmt? Aber ich denke, das wird von den Emoji außer Kraft gesetzt.
Birgire
1
Ich nehme an, es soll die Priorität sein, daher scheint die Reihenfolge falsch zu sein. Ich habe es im Codex geändert, in der Hoffnung, dass wir es nicht falsch verstanden haben :-)
rob_st
Ich habe Ihre Bearbeitung im Codex korrigiert und Ihren Code in Ihrer Antwort korrigiert. Die erlaubten Argumente sollten sein 3, wenn Sie 1festlegen, dass Ihr Code als fehlschlägt $img, $siteurlignoriert wird und daher in Ihrem Filter undefiniert ist :-)
Pieter Goosen