web-dev-qa-db-ja.com

":)"を入力したときに別の顔文字を表示する

WordPressに:)を入力すると、自動的に次のように置き換えられます。

enter image description here 

:)に別の顔文字を使う方法はありますか

9
krish

:)の絵文字をオーバーライドすると????

コンテンツスマイリーは次のように変換されます。

add_filter( 'the_content', 'convert_smilies' );

convert_smilies()関数の this part は重要です。

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

translate_smiley()を覗くと、 following が見つかります。

// 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()の関数の説明の中で、 following を読むことができます。

ブロガーが入力したコードと画像ファイルの値をキーにして、プラグインが$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が機能するように、定義済みのスマイリーキーに対してのみ機能します。

しかし、この推奨される方法は好きではありません。グローバル配列を変更してください。うまくいけば、もう1つの方法があるはずです!

デモプラグイン - ????

私はこのためのアプリケーションを考え出すことを試みました。これが既に存在するかどうかはわかりませんが、ここにあります。

<?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 のおかげで、グローバルな comment のために、私はそれに応じてスニペットを書き直しました。

新しいsmilies_transフィルタに関して、 Pieter Goosen によって 新しく作成された チケット #35905 があります。

アップデート - WordPress 4.7以降

新しいフィルタはWordPress 4.7以降では available に​​なりますが、名前はsmilies_transではなくsmiliesになります。

上記の例は次のように書くことができます。

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配列をいじる必要はもうありません。

14
birgire

スマイリーを使用する上で WordPressコーデックスによると

あなたのサーバーに同じ名前で欲しい画像をアップロードし(wp-content/images/smiliesなどで)、これをあなたのテーマのfunction.phpに入れてください:

add_filter( 'smilies_src'、 'my_custom_smilies_src'、10、3); 
関数my_custom_smilies_src($ img_src、$ img、$ siteurl){
 return $ siteurl '/ wp-content/images/smilies /'.$ img; 
}
これは http://example.com/wp-includes/images/smilies/icon_question.gifに置き換えます - http://example.com/wp-content/images /smilies/icon_question.gif
3
rob_st