コンテンツスマイリーは次のように変換されます。
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以降では 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
配列をいじる必要はもうありません。
スマイリーを使用する上で 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