在编辑媒体中使用富文本编辑器,用于附件媒体描述

时间:2021-07-27 作者:3x5

我的职能如下。php:

add_filter( \'wp_editor_settings\', function( $settings ){
  if( get_post_type() == \'attachment\'){
    $settings = [
      \'wpautop\'       => true,
      \'textarea_name\' => \'content\',
      \'textarea_rows\' => 10,
      \'media_buttons\' => false,
      \'tinymce\' => true,
    ];
    return $settings;
 }
});
当我在Wordpress管理员中编辑媒体时,这确实添加了可视化选项卡。然而,一旦我保存更改,然后返回编辑媒体并再次保存,它会将所有html转换为编码的html实体。

例如

<h2>Another H2</h2>
成为

&lt;h2&gt;Another H2&lt;/h2&gt;
在前端打印html。因此,我肯定缺少了一些保留html的重要部分。编辑媒体描述时,我需要添加什么才能使用“视觉”选项卡?

This post 几乎是一个正确的答案,但它不能解释这个HTML问题。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

因此,我肯定缺少了一些保留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> 成为&amp;lt;h2&amp;gt; 在编辑器的文本/HTML模式下&lt;h2&gt; 然后在视觉模式下显示为<h2>.

那么如何解决这个问题呢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, 因此,无需手动重新挂钩。

相关推荐

将mediaelement.js插件添加到WordPress视频播放器控制栏

我正在尝试添加的SkipBack和JumpForward插件mediaelement.js 进入我的wordpress[视频]标签控制栏。到目前为止,我已经在js文件(videoplayerjs)中添加了这些插件js,如下所示:/*! * MediaElement.js - Jump Forward Plugin * http://www.mediaelementjs.com/ * * Wrapper that mimics native HTML5 MediaEl