Wp_editorビジュアルエディタで、選択範囲をショートコードでラップするように次のマクロボタンを定義しました。
(function() {
tinymce.create('tinymce.plugins.ingredient_name', {
init : function(ed, url){
ed.addButton('ingredient_name', {
title : 'Tag ingredient',
onclick : function() {
var text=ed.selection.getContent({'format':'text'});
ed.execCommand('mceInsertContent',false,'[ingredient_name]' + text + '[/ingredient_name]');
},
image: url + "/name.png"
});
}
});
tinymce.PluginManager.add('ingredient_name', tinymce.plugins.ingredient_name);
})();
このマクロは意図したとおりに機能しますが、生成されるショートコードの前にtinymceも挿入されています。だから、この結果の代わりに:
1 [ingredient_name]pound[/ingredient_name] salami
私はこれを得ます:
1 [ingredient_name]pound[/ingredient_name] salami
これはどういうわけかDBに挿入するときにどうしようもなく、そしてテンプレートにレンダリングされます、私は '1ポンドのサラミ'を取得します。元に戻って問題のあるものを削除することはできますが、最初はそのエンティティを挿入しないようにしてください。何か案は?
それは、ちょっとしたmceの問題ではなく、むしろtinyMCEの出力をフィルタリングして間違った文字セットで解釈してから、ページに不要な文字を渡すphp DOMdocumentの問題ではないことが判明しました。
楽しいね!
TinyMCE WYSIWYGエディタはデフォルトでスペースシンボルを
エンティティに変換します。これは、デフォルトのentities
プロパティがスペースシンボルを
エンティティに変換するように設定されているために発生します。
entities: "160,nbsp,38,amp,34,quot,162,cent,8364,euro,163,pound,165,yen,169,copy,174,reg,8482,trade,8240,permil,181,micro...."
この問題を解決するには、entities
initプロパティを再定義する必要があります。例えば:
tinyMCE.init({
entities: "38,amp,34,quot,162,cent,8364,euro,163,pound,165,yen,169,copy,174,reg,8482,trade"
});
WordPressでTinyMCEオプションを初期化するには、tiny_mce_before_init
フィルタに独自のフックを追加する必要があります。
function wpse8170_change_mce_options($initArray) {
// other settings...
$initArray['entities'] = '38,amp,34,quot,162,cent,8364,euro,163,pound,165,yen,169,copy,174,reg,8482,trade';
return $initArray;
}
add_filter('tiny_mce_before_init', 'wpse8170_change_mce_options');
調整可能な値の一覧は、 TinyMCE設定 ページで読むことができます。そして エンティティの最後のリンク オプション。