It's still unclear to me why this is happening, because all the encoding of <
and >
for comments looks the same as posts do in the database view, so I'm still unsure why TinyMCE is treating post_content
vs comment_content
differently. But ultimately, all that needs to happen is for the existing escaped HTML tags to get decoded when editing on the backend.
jQuery( document ).on( 'tinymce-editor-init', function( event, editor ) {
function htmlDecode(input) {
var doc = new DOMParser().parseFromString(input, "text/html");
return doc.documentElement.textContent;
}
function fixTinyMCEComments() {
var parent = document.querySelector("#content_ifr").contentDocument.children[0].querySelector("#tinymce");
Array.from(parent.children).forEach(function(p) {
p.innerHTML = htmlDecode(p.innerHTML);
});
}
fixTinyMCEComments();
});
Register it wherever your admin_enqueue_scripts
is called in functions.php
- I enqueue it only on comment.php
:
// Enable TinyMCE as the backend comments editor
function load_backend_comments_editor( $settings, $id ){
global $pagenow;
if ( $id == 'content' && $pagenow === 'comment.php' ){
$settings['tinymce'] = true;
wp_enqueue_script( 'mytheme-admin' );
}
return $settings;
}
add_filter( 'wp_editor_settings', 'load_backend_comments_editor', 10, 2 );
This is a bit of a hack, because the implementation depends on TinyMCE maintaining its current node tree, but since this is on the backend for something that likely won't continue to be edited after a month or so, I'm okay with it. Any improvements are welcome, though!