首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在post_content中使用的单个SVG白名单

在post_content中使用的单个SVG白名单
EN

WordPress Development用户
提问于 2021-04-15 15:48:00
回答 1查看 252关注 0票数 0

我有一个建在古腾堡的街区--在里面我使用了“@wordpress/components”中的Icon元素

我使用一个箭头创建一个下拉列表,它以SVG的形式呈现。当然,当任何不是超级管理员或管理员的人保存这个块时,SVG就会被剥离,并且没有找到与save()函数匹配的块中断。

出于安全原因,我不想在网站上白名单所有的SVGs所以理想情况下,我只想白名单这个。我原以为WP也能传递可接受的值,但我错了。

代码语言:javascript
复制
function allow_arrow_svg( $tags ) {

$tags['svg'] = array(
    'aria-hidden' => array( 'true', 'false' ),
    'role'        => array( 'img' ),
    'xmlns'       => array( 'http://www.w3.org/2000/svg' ),
    'width'       => array( '20' ),
    'height'      => array( '20' ),
    'viewbox'     => array( '0 0 20 20' ),
    'style'       => array( 'color', 'fill' ),
    'class'       => array(),
);

$tags['path'] = array(
    'd' => array( 'M5 6l5 5 5-5 2 1-7 7-7-7z' ),
);
return $tags;
}

add_filter( 'wp_kses_allowed_html', 'allow_arrow_svg', 10, 2 );

将是完美的-但不工作,因为我仍然可以传递各种属性的任何东西。

有什么建议吗?谢谢你抽出时间:)

EN

回答 1

WordPress Development用户

发布于 2021-04-19 10:51:50

这个问题在某种程度上改变了被问到的问题--不过,如果其他一些mug在他们的保存函数中反应过度,那么这个问题可能是有用的。

因此,正如@Tom J Nowell所建议的那样,这一问题得到了解决,取而代之的是进行了一个PHP回调,以允许保存。我不推荐这个块,并将SVG从save函数中移除,这样反推荐中的save函数包含SVG,而新的则不包含SVG。

因此,旧块不会显示SVG两次,但是新块可能会被迁移--在块迁移中强制设置属性--在块反推荐函数下,记住在新版本的块注册中声明新的blockVersion属性--我将块注册的PHP和JS端的默认值设置为null

代码语言:javascript
复制
migrate( attributes ) {
    attributes.blockVersion = '2.0.0';
return { ...attributes }

render_callback函数下,只有当获得版本属性'2.0.0‘时,我才呈现SVG服务器端。如下所示:

代码语言:javascript
复制
/**
 * Callback function to render the block on the front end
 *
 * @since 2.0.0
 * @param Array  $attributes  Array of block attributes
 * @param String $content     Block content
 *
 * @return String HTML
 */
function render_block( $attributes, $content ) {
    if ( ! empty( $attributes['blockVersion'] ) && version_compare( $attributes['blockVersion'], '2.0.0', '>=' ) ) {
        $arrow_colour = esc_attr( $attributes['svgColor'] );
        $position     = esc_attr( $attributes['position'] );
    
        $svg = "";
    
        return "
        
            $svg
            $content
        ";

    } else {
        return $content;
    }
}

最后,在块的编辑函数中--我使用setAttribute()将属性设置为'2.0.0‘,这样新块在内容中始终具有块版本的非默认值。这允许PHP获取不同的版本。

票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/386672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档