Afficher un smiley différent lors de la saisie de «:)»

9

Si vous entrez :)dans WordPress, il le remplace automatiquement par:

entrez la description de l'image ici

Existe-t-il un moyen d'utiliser un smiley différent pour :)

krish
la source
Salut krish, pourriez-vous fournir plus de détails sur ce que vous avez déjà essayé (et pourquoi cela n'a pas fonctionné)?
kraftner

Réponses:

14

Remplacer les emoji de :) en 😎

Les smileys de contenu sont convertis avec:

add_filter( 'the_content', 'convert_smilies' );

cette partie de la convert_smilies()fonction est importante:

$content = preg_replace_callback( $wp_smiliessearch, 'translate_smiley', $content );

Si nous jetons un œil, translate_smiley()nous trouvons ce qui suit :

// Don't convert smilies that aren't images - they're probably emoji.
if ( ! in_array( $ext, $image_exts ) ) {
     return $img;
}

avant l' smilies_srcapplication du filtre.

Ce filtre n'est donc pas disponible dans le cas du :)smiley.

Nous avons les smileys initialisés avec:

add_action( 'init', 'smilies_init', 5 );

et dans la description de la fonction, smilies_init()nous pouvons lire ce qui suit :

Les plugins peuvent remplacer la liste de smileys par défaut en définissant le $wpsmiliestrans sur un tableau, avec la clé du code que le blogueur tape et la valeur du fichier image.

Voici le $wpsmiliestranstableau global :

$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",
);

ou l'affichage ksorted plus agréable:

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-)] => 😎
)

Donc, si je comprends bien le commentaire de base ci-dessus, alors nous pourrions faire ce qui suit:

/**
 * :) as the cool emoji
 */
add_action( 'init', function() use ( &$wpsmiliestrans )
{
    if( is_array( $wpsmiliestrans ) && get_option( 'use_smilies' ) )
        $wpsmiliestrans[':)'] = $wpsmiliestrans[':cool:'];

}, 6 );

mais cela ne fonctionne que pour les touches smiley prédéfinies, pour que le $wp_smiliessearchfonctionne.

Mais je n'aime pas cette approche suggérée, modifiant le tableau global! J'espère qu'il y en a un autre meilleur!

Plugin de démonstration - 🎅

J'ai essayé de trouver une application pour cela. Je ne sais pas si cela existe déjà, mais le voici:

<?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 );

Merci à Ismael Miguel pour le commentaire global , j'ai réécrit les extraits en conséquence.

Voici le nouveau ticket # 35905 créé par Pieter Goosen , concernant un nouveau smilies_transfiltre.

Mise à jour - WordPress 4.7+

Le nouveau filtre sera disponible dans WordPress 4.7+, mais son nom ne le sera smiliespas smilies_trans.

Nos exemples ci-dessus peuvent s'écrire:

add_filter( 'smilies', function( $smilies )
{
    if( isset( $smilies[':cool:'] ) )
        $smilies[':)'] = $smilies[':cool:'];

    return $smilies;
} );

ou explicitement avec:

add_filter( 'smilies', function( $smilies )
{
    $smilies[':)'] = "\xf0\x9f\x98\x8e";

    return $smilies;
} );

Le plugin de démonstration devient:

<?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;
} );

Nous n'avons plus besoin de jouer avec le $wpsmiliestranstableau global !

Birgire
la source
Les smileys fonctionneraient-ils alors avec toutes les polices?
rob_st
Étrange à quel point les smileys sont différents entre mon onglet et mon PC. :-) Quoi qu'il en soit, jip, n'aime pas non plus modifier avec des globaux, mais cela semble être le meilleur que vous puissiez tirer de cette offre. Je pense que nous pourrions envisager d'ajouter un filtre approprié dans le noyau que nous pouvons utiliser pour filtrer les smileys au lieu de modifier un global merdique. ;-)
Pieter Goosen
1
ticket trac # 35905 soumis. Permet de croiser les doigts pour obtenir un filtre approprié
Pieter Goosen
1
Et alors add_action( 'init', function() use (&$wpsmiliestrans){ $wpsmiliestrans[':)'] = "\xf0\x9f\x98\x8e"; }, 6 );?
Ismael Miguel
1
C'est une promesse - en fait j'utilise usebeaucoup le mot - clé dans mes réponses ici, mais c'est un bon rappel concernant les globales, merci encore (:) <- nous pourrions peut-être utiliser un smiley symétrique pour une meilleure accessibilité pour tout le monde @IsmaelMiguel
birgire
3

Selon le Codex WordPress sur l'utilisation de smileys :

Téléchargez les images que vous voulez avec le même nom sur votre serveur (par exemple dans wp-content / images / smilies) et mettez-les dans la fonction de votre thème.php:

add_filter ('smilies_src', 'my_custom_smilies_src', 10, 3);
   fonction my_custom_smilies_src ($ img_src, $ img, $ siteurl) {
       return $ siteurl. '/ wp-content / images / smilies /'.$ img;
   }
Cela remplacera http://example.com/wp-includes/images/smilies/icon_question.gif par http://example.com/wp-content/images/smilies/icon_question.gif.

rob_st
la source
Vous ne savez pas pourquoi la démo du Codex suppose 10 arguments d'entrée, au lieu de 3? Mais je pense que cela est dépassé par les Emoji.
birgire
1
Je suppose que c'est censé être la priorité, donc l'ordre semble incorrect. Je l'ai changé dans le Codex, en espérant que nous ne nous sommes pas trompés :-)
rob_st
J'ai corrigé votre modification dans le codex et corrigé votre code dans votre réponse. Les arguments autorisés devraient être 3, le paramétrer sur 1fera échouer votre code comme $img, $siteurlsera ignoré et ne sera donc pas défini dans votre filtre :-)
Pieter Goosen