因此,我肯定缺少了一些保留html的重要部分。
不,您的代码正常。
但是,我需要第二个参数($editor_id
) 并检查其值是否为attachment_content
这是“上的媒体描述文本区域的编辑器ID”;“编辑媒体”;页我也不会添加\'textarea_name\' => \'content\'
部分
保存更改后,再返回编辑媒体并再次保存,它会将所有html转换为编码的html实体
是的,这是因为WordPress适用format_to_edit()
(see source on Trac) 然后format_for_editor()
(see source on Trac), 这些函数都使用htmlspecialchars()
, 因此,HTML将被转义两次。
例如,<h2>
成为&lt;h2&gt;
在编辑器的文本/HTML模式下<h2>
然后在视觉模式下显示为<h2>
.
那么如何解决这个问题呢遗憾的是,从WordPress 5.8开始,没有钩子可以绕过/禁用第一个或第二个HTML转义,但您可以尝试以下技巧,通过取消钩子来禁用第二个转义format_for_editor()
从the_editor_content
filter if 当前编辑器ID为attachment_content
:
function my_fix_the_editor_content_double_escaping( $content ) {
remove_filter( \'the_editor_content\', \'format_for_editor\' );
// * We\'re not actually modifying the content, but only adding the above code.
return $content;
}
// * Use this instead of the code you have in the question.
add_filter( \'wp_editor_settings\', function ( $settings, $editor_id ) {
// Check if the current page is the "Edit Media" page (at wp-admin/post.php), and if
// so, we customize the editor settings.
if ( is_admin() && \'attachment\' === get_current_screen()->id &&
\'attachment_content\' === $editor_id
) {
// Change only what need to be changed.
$settings[\'wpautop\'] = true;
$settings[\'textarea_rows\'] = 10;
$settings[\'media_buttons\'] = false;
$settings[\'tinymce\'] = true;
add_filter( \'the_editor_content\', \'my_fix_the_editor_content_double_escaping\', 1 );
}
return $settings; // Note: ALWAYS return it!
}, 10, 2 );
所以我希望这会有所帮助,不要担心,WordPress会自动重新挂钩
format_for_editor()
返回到
the_editor_content
, 因此,无需手动重新挂钩。