Ich habe die folgende Makro-Schaltfläche definiert, um eine Auswahl in einen Shortcode im visuellen Editor von wp_editor einzufügen:
(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);
})();
Das Makro funktioniert wie vorgesehen, mit der Ausnahme, dass tinymce auch & nbsp vor dem resultierenden Shortcode einfügt. Anstelle dieses Ergebnisses:
1 [ingredient_name]pound[/ingredient_name] salami
Ich bekomme das:
1 [ingredient_name]pound[/ingredient_name] salami
dies wird dann irgendwie beim Einfügen in die DB entstellt und in die Vorlage gerendert, ich bekomme "1 Pfund Salami". Ich kann zurückgehen und die beleidigenden & nbsp's entfernen, aber ich würde es vorziehen, dass tinyMCE diese Entität nicht an erster Stelle einfügt. Irgendwelche Ideen?
nun, es stellte sich heraus, dass es sich überhaupt nicht um ein Problem mit tiny mce handelte, sondern um ein PHP-DOM-Dokument, das die Ausgabe von tinyMCE filterte, im falschen Zeichensatz interpretierte und dann Müllzeichen an die Seite weitergab.
Spaß!
Der TinyMCE WYSIWYG-Editor konvertiert Leerzeichen standardmäßig in
-Entitäten. Dies liegt daran, dass die Standardeigenschaft entities
so festgelegt ist, dass Leerzeichen in
-Entitäten konvertiert werden:
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...."
Um dieses Problem zu beheben, müssen Sie die Eigenschaft entities
init neu definieren. Zum Beispiel:
tinyMCE.init({
entities: "38,amp,34,quot,162,cent,8364,euro,163,pound,165,yen,169,copy,174,reg,8482,trade"
});
Um die TinyMCE-Optionen in WordPress zu initialisieren, müssen Sie dem tiny_mce_before_init
-Filter Ihren eigenen Hook hinzufügen:
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');
Die vollständige Liste der Werte, die Sie anpassen können, finden Sie unter TinyMCE-Konfiguration Seite. Und der letzte Link für Einheiten Option.