「:)」と入力したときに別の笑顔を表示する


9

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

ここに画像の説明を入力してください

に別のスマイリーを使用する方法はありますか :)


こんにちは、クリッシュ、あなたがすでに試したことの詳細を教えてもらえますか(そしてそれがうまくいかなかった理由)?
クラフトナー2016

回答:


14

:)の絵文字をtoに上書きする

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

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

しかし、私はこの提案されたアプローチが好きではありません、グローバル配列を変更します!うまくいけば、もう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のグローバルコメントに感謝し、それに応じてスニペットを書き直しました。

ここだ、新しく作成されたチケット#35905によってピーター・グーセン新しいに関しては、smilies_transフィルタ。

アップデート-WordPress 4.7以降

新しいフィルターはWordPress 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 2016

タブとPCでスマイリーがどのように異なって見えるかがおかしい。:-)とにかく、ジップもグローバルで変更するのは好きではありませんが、これはこの取引から抜け出すのに最適なようです。くだらないグローバルを変更する代わりに、スマイリーをフィルタリングするために使用できる適切なフィルターをコアに追加することを検討するかもしれません。;-)
Pieter Goosen

1
tracチケット#35905が送信されました。適切なフィルターが適用されることを確認します
Pieter Goosen

1
いかがadd_action( 'init', function() use (&$wpsmiliestrans){ $wpsmiliestrans[':)'] = "\xf0\x9f\x98\x8e"; }, 6 );ですか?
Ismael Miguel

1
これは約束です。実際use、私はここで私の回答にキーワードをたくさん使用していますが、グローバルについての良い思い出です。ありがとうございます(:) <-対称的なスマイリーを使用して、すべての人がアクセスしやすいようにすることができます@IsmaelMiguel
birgire

3

スマイリーの使用に関するWordPress Codexによると:

同じ名前の必要な画像をサーバーにアップロードし(たとえば、wp-content / images / smiliesに)、これをテーマのfunction.phpに配置します。

add_filter( 'smilies_src'、 'my_custom_smilies_src'、10、3);
   function 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の入力引数を想定している理由がわかりませんか?しかし、私はこれが絵文字によって上書きされると思います。
バージィ

1
優先することを想定しているので、順序が間違っているようです。私は間違っていないことを願って、コーデックスでそれを変更しました:-)
rob_st

コーデックスの編集内容を修正し、回答のコードを修正しました。許可された引数はする必要があります3し、それを設定し、1としてあなたのコードを失敗し $img$siteurl無視され、そのためには、あなたのフィルタ:-)に定義されません
ピーター・グーセン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.