":)"를 입력하면 다른 웃는 모습을 표시합니다


9

:)WordPress에 입력하면 다음 과 같이 자동으로 바뀝니다.

여기에 이미지 설명을 입력하십시오

다른 스마일을 사용하는 방법이 있습니까? :)


안녕 krish, 당신은 당신이 이미 시도한 (그리고 왜 작동하지 않는)에 대한 자세한 내용을 제공 할 수 있습니까?
kraftner

답변:


14

:)의 이모티콘을 😎으로 재정의

콘텐츠 웃음은 다음과 같이 변환됩니다.

add_filter( 'the_content', 'convert_smilies' );

여기서 이 부분convert_smilies()기능이 중요하다 :

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

우리가 들여다 경우 translate_smiley()우리는 찾아 다음 :

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

smilies_src필터가 적용 되기 전에 .

따라서이 필터는 :)웃는 경우에는 사용할 수 없습니다 .

우리는 다음과 같이 웃음을 초기화했습니다.

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

함수 설명 내에서 다음을smilies_init() 읽을 수 있습니다 .

플러그인은 $wpsmiliestrans 블로거가 입력하는 코드 키와 이미지 파일 값을 사용하여를 배열 로 설정하여 기본 스마일리스트를 무시할 수 있습니다 .

전역 $wpsmiliestrans배열 은 다음과 같습니다 .

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

또는 더 좋은 ksorted 디스플레이 :

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

위의 핵심 의견을 올바르게 이해하면 다음을 수행 할 수 있습니다.

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

}, 6 );

그러나 이것은 사전 정의 된 스마일 키에서만 작동 $wp_smiliessearch합니다.

그러나이 제안 된 접근 방식이 마음에 들지 않아 전역 배열을 수정합니다! 잘만되면 다른 것이 더 좋을 것이다!

데모 플러그인-🎅

나는 이것에 대한 응용 프로그램을 생각해 보았습니다. 이것이 이미 존재하는지 확실하지 않지만 여기 있습니다.

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

글로벌 의견에 대해 Ismael Miguel 에게 감사드립니다 .

새 필터 와 관련하여 Pieter Goosen새로 생성 한 티켓 # 35905 가 있습니다.smilies_trans

업데이트-WordPress 4.7+

새로운 필터는 것입니다 가능한 4.7+ 워드 프레스, 그러나 그것의 이름이 될 것 smilies없습니다 smilies_trans.

위의 예제는 다음과 같이 작성할 수 있습니다.

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

    return $smilies;
} );

또는 명시 적으로

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

    return $smilies;
} );

데모 플러그인은 다음과 같습니다.

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

우리는 $wpsmiliestrans더 이상 전역 배열 을 망칠 필요가 없습니다!


그러면 스마일이 모든 글꼴에서 작동합니까?
rob_st

내 탭과 PC간에 스마일이 어떻게 다른지 이상한. :-) 어쨌든, 지프도 글로벌로 수정하는 것을 좋아하지 않지만, 이것은 당신 이이 거래에서 벗어날 수있는 최선의 것처럼 보입니다. 나는 우리가 엉뚱한 세계를 바꾸는 대신 스마일을 걸러내는 데 사용할 수있는 적절한 필터를 코어에 추가하는 것을 고려할 수 있다고 생각합니다. ;-)
Pieter Goosen

1
trac 티켓 # 35905가 제출되었습니다. 올바른 필터를 얻도록 손가락을 교차
시킵니다

1
어때요 add_action( 'init', function() use (&$wpsmiliestrans){ $wpsmiliestrans[':)'] = "\xf0\x9f\x98\x8e"; }, 6 );?
Ismael Miguel

1
그것은 약속 - 실제로 제가 사용 use여기 내 대답에 키워드를 많이하지만, 다시 (: <전역, 감사에 관한 좋은 알림입니다 - 아마 우리 모두의 @IsmaelMiguel 더 나은 접근성에 대한 대칭 웃는를 사용할 수 있습니다
birgire

3

웃음 사용 에 대한 워드 프레스 코덱스에 따르면 :

같은 이름으로 원하는 이미지를 서버에 업로드하고 (예 : wp-content / images / smilies) 테마의 function.php에 넣으십시오.

add_filter ( 'smilies_src', 'my_custom_smilies_src', 10, 3);
   my_custom_smilies_src 함수 ($ img_src, $ img, $ siteurl) {
       $ siteurl을 반환합니다. '/ wp-content / images / smilies /'.$ img;
   }
그러면 http://example.com/wp-includes/images/smilies/icon_question.gifhttp://example.com/wp-content/images/smilies/icon_question.gif바뀝니다.


왜 Codex 데모가 3 개 대신 10 개의 입력 인수를 가정하고 있는지 잘 모르십니까? 그러나 나는 이것이 이모티콘에 의해 재정의 된 것으로 생각합니다.
birgire

1
우선 순위가 중요하기 때문에 순서가 잘못된 것 같습니다. 나는 우리가 그것을 잘못하지 않기를 바라고 코덱스에서 그것을 바꿨다 :-)
rob_st

코덱스에서 편집 내용을 수정하고 답변에서 코드를 수정했습니다. 허용되는 인수해야 3할 설정, 1같은 코드를 실패 $img, $siteurl무시되고 그에는 필터 :-)에 정의되지 않습니다
피터 구센
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.