Exibir smiley diferente ao inserir ":)"

9

Se você digitar :)no WordPress, ele será automaticamente substituído por:

insira a descrição da imagem aqui

Existe uma maneira de usar um smiley diferente para o :)

krish
fonte
Oi, krish, você poderia fornecer mais detalhes sobre o que você já tentou (e por que não funcionou)?
Kraftner

Respostas:

14

Substituindo o emoji de :) para 😎

Os smilies de conteúdo são convertidos com:

add_filter( 'the_content', 'convert_smilies' );

onde esta parte da convert_smilies()função é importante:

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

Se espreitarmos translate_smiley(), encontramos o seguinte :

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

antes da smilies_srcaplicação do filtro.

Portanto, este filtro não está disponível no caso do :)smiley.

Os smilies foram inicializados com:

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

e dentro da descrição da função smilies_init(), podemos ler o seguinte :

Os plug-ins podem substituir a lista de smileys padrão configurando-o $wpsmiliestrans como uma matriz, com a chave do código digitado pelo blogueiro e o valor do arquivo de imagem.

Aqui está a $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",
);

ou a tela melhor ordenada:

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

Portanto, se eu entendi corretamente o comentário principal acima, poderíamos fazer o seguinte:

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

}, 6 );

mas isso só funciona para teclas de smiley predefinidas, para $wp_smiliessearchque funcionem.

Mas não gosto dessa abordagem sugerida, modificando a matriz global! Espero que haja outro melhor!

Plug-in de demonstração - 🎅

Eu tentei criar um aplicativo para isso. Não tenho certeza se isso já existe, mas aqui 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 );

Graças a Ismael Miguel pelo comentário global , reescrevi os trechos de acordo.

Aqui está o tíquete recém-criado # 35905, de Pieter Goosen , sobre um novo smilies_transfiltro.

Atualização - WordPress 4.7+

O novo filtro estará disponível no WordPress 4.7+, mas o nome smiliesnão estará smilies_trans.

Nossos exemplos acima podem ser escritos como:

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

    return $smilies;
} );

ou explicitamente com:

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

    return $smilies;
} );

O plugin de demonstração se torna:

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

Não precisamos mais mexer com a $wpsmiliestransmatriz global !

Birgire
fonte
Os smilies funcionariam com todas as fontes então?
rob_st
Estranho como os smileys parecem diferentes entre minha guia e o pc. :-) De qualquer forma, jip, também não gosta de modificar os globais, mas isso parece o melhor que você conseguirá com esse acordo. Eu acho que podemos procurar adicionar um filtro adequado no núcleo que possamos usar para filtrar smileys em vez de alterar um global ruim. ;-)
Pieter Goosen
11
bilhete trac # 35905 enviado. Deixa os dedos cruzados que nós temos um filtro apropriado
Pieter Goosen
11
Que tal add_action( 'init', function() use (&$wpsmiliestrans){ $wpsmiliestrans[':)'] = "\xf0\x9f\x98\x8e"; }, 6 );?
Ismael Miguel
11
É uma promessa - na verdade, uso muito a usepalavra-chave nas minhas respostas aqui, mas é um bom lembrete sobre os globais, obrigado novamente (:) <- talvez possamos usar um smiley simétrico para melhor acessibilidade para todos @IsmaelMiguel
birgire
3

De acordo com o Codex WordPress sobre o uso de smilies :

Carregue as imagens que você deseja com o mesmo nome no seu servidor (por exemplo, em wp-content / images / smilies) e coloque-o na função do seu tema.php:

add_filter ('smilies_src', 'my_custom_smilies_src', 10, 3);
   função my_custom_smilies_src ($ img_src, $ img, $ siteurl) {
       return $ siteurl. '/ wp-content / images / smilies /'.$ img;
   }
Isso substituirá http://example.com/wp-includes/images/smilies/icon_question.gif por http://example.com/wp-content/images/smilies/icon_question.gif

rob_st
fonte
Não sabe por que a demonstração do Codex está assumindo 10 argumentos de entrada, em vez de 3? Mas acho que isso é anulado pelos Emoji.
22616 birgire
11
Suponho que seja a prioridade, portanto a ordem parece incorreta. Mudei-lo no Codex, esperando que nós não entendi errado :-)
rob_st
Corrigi sua edição no códice e o código na sua resposta. Os argumentos permitidos deve ser 3, definindo-o como 1irá falhar o seu código como $img, $siteurlserá ignorado e será mesmos ser indefinido no seu filtro :-)
Pieter Goosen