Mostrar una carita diferente al ingresar ":)"

9

Si ingresas :)en WordPress, lo reemplaza automáticamente con:

ingrese la descripción de la imagen aquí

¿Hay alguna manera de usar una carita diferente para :)

Krish
fuente
Hola krish, ¿podrías proporcionar más detalles sobre lo que ya has probado (y por qué no funcionó)?
kraftner

Respuestas:

14

Anulando el emoji de :) a 😎

Las caritas de contenido se convierten con:

add_filter( 'the_content', 'convert_smilies' );

donde esta parte de la convert_smilies()función es importante:

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

Si echamos un vistazo translate_smiley(), encontramos lo siguiente :

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

antes de smilies_srcaplicar el filtro.

Por lo tanto, este filtro no está disponible en el caso de la :)carita sonriente.

Tenemos las caritas inicializadas con:

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

y dentro de la descripción de la función smilies_init()podemos leer lo siguiente :

Los complementos pueden anular la lista de emoticones predeterminada configurando $wpsmiliestrans una matriz, con la clave del código que escribe el blogger y el valor del archivo de imagen.

Aquí está la $wpsmiliestransmatriz 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",
);

o la pantalla ksorted más bonita:

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

Entonces, si entiendo correctamente el comentario central anterior, entonces podríamos hacer lo siguiente:

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

}, 6 );

pero esto solo funciona para las teclas sonrientes predefinidas, para $wp_smiliessearchque funcionen.

Pero no me gusta este enfoque sugerido, ¡modificar la matriz global! ¡Ojalá haya otro mejor!

Complemento de demostración - 🎅

Traté de encontrar una aplicación para esto. No estoy seguro si esto ya existe, pero aquí está:

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

Gracias a Ismael Miguel por el comentario global , reescribí los fragmentos en consecuencia.

Aquí está el ticket recién creado # 35905 por Pieter Goosen , con respecto a un nuevo smilies_transfiltro.

Actualización - WordPress 4.7+

El nuevo filtro se dispone en WordPress 4.7+, pero de nombre será smiliesno smilies_trans.

Nuestros ejemplos anteriores se pueden escribir como:

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

    return $smilies;
} );

o explícitamente con:

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

    return $smilies;
} );

El complemento de demostración se convierte en:

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

¡Ya no necesitamos perder el tiempo con la $wpsmiliestransmatriz global !

Birgire
fuente
¿Funcionarían los emoticones con cada fuente entonces?
rob_st
Es extraño lo diferentes que se ven los emoticones entre mi pestaña y mi PC. :-) De todos modos, jip, tampoco me gusta modificar con globals, pero esto parece lo mejor que vas a obtener de este trato. Creo que podríamos considerar agregar un filtro adecuado en el núcleo que podamos usar para filtrar emoticones en lugar de alterar un global de mierda. ;-)
Pieter Goosen
1
boleto de trác # 35905 enviado. Vamos a cruzar los dedos para obtener un filtro adecuado
Pieter Goosen
1
¿Qué tal add_action( 'init', function() use (&$wpsmiliestrans){ $wpsmiliestrans[':)'] = "\xf0\x9f\x98\x8e"; }, 6 );?
Ismael Miguel
1
Es una promesa: en realidad uso mucho la usepalabra clave en mis respuestas aquí, pero es un buen recordatorio con respecto a los globales, gracias de nuevo (:) <- tal vez podríamos usar una carita simétrica para una mejor accesibilidad para todos @IsmaelMiguel
birgire
3

Según el Codex de WordPress sobre el uso de emoticones :

Sube las imágenes que quieras con el mismo nombre a tu servidor (por ejemplo, en wp-content / images / smilies) y pon esto en la función de tu tema.php:

add_filter ('smilies_src', 'my_custom_smilies_src', 10, 3);
   function my_custom_smilies_src ($ img_src, $ img, $ siteurl) {
       return $ siteurl. '/ wp-content / images / smilies /'.$ img;
   }
Eso reemplazará http://example.com/wp-includes/images/smilies/icon_question.gif con http://example.com/wp-content/images/smilies/icon_question.gif

rob_st
fuente
¿No está seguro de por qué la demostración del Codex está asumiendo 10 argumentos de entrada, en lugar de 3? Pero creo que esto es anulado por los Emoji.
Birgire
1
Supongo que está destinado a ser la prioridad, por lo que el orden parece incorrecto. Lo cambié en el Codex, esperando no equivocarnos :-)
rob_st
He corregido su edición en el códice y corregido su código en su respuesta. Los argumentos permitidos deberían ser 3: establecerlo 1fallará su código como $img, $siteurlserá ignorado y por lo tanto no estará definido en su filtro :-)
Pieter Goosen