如何允许在古腾堡用户界面元素中使用超文本标记语言帮助文本?

时间:2019-11-06 作者:NextGenThemes

我想知道如何将可单击的链接添加到帮助文本?

el(
    ToggleControl,
    {
        label: \'Toogle\',
        help: \'<a href="https://.." >This will be escaped, I do not want that</a>\',
        checked: props.attributes.toggle,
        onChange: ( value ) => {
            props.setAttributes( { toggle: value } );
        },
    }
)
基本上每个GB UI元素都有help 但这是对所有HTML的转义,我怎样才能阻止它转义呢?

我有下面这样的代码在其他地方使用,当前的答案并不是我真正喜欢的解决方案。我基本上只需要在一些罕见的情况下纯文本和链接。我不知道如何在Gutenberg中创建包含链接元素的文本元素。我正在寻找一种解决方案,可以使用regex或其他东西将我在PHP中定义的HTML转换为我也可以在GB帮助文本中使用的内容。例如,可能会将链接转到降价或其他内容,然后在GB中创建保存元素。聪明的东西?还是我想得太多了?我可以在php中专门为GB定义它。但是我该如何定义它,以便可以使用它创建一个包含链接的元素。

<?php
...
            \'description\' => sprintf(
                // Translators: %1$s Providers
                __( \'Post the URL of the video here. For %1$s and any <a href="%2$s">unlisted</a> video hosts paste their iframe embed codes.\', \'advanced-responsive-video-embedder\' ),
                esc_html( $embed_code_only ),
                esc_url( \'https://nextgenthemes.com/arve-pro/#video-host-support\' )
            ),

1 个回复
SO网友:Sally CJ

我知道这不会让你快乐,但是&mdash;除非复制相关UI组件并对其进行编辑(以便允许HTML字符串),然后改用它&mdash;您无法阻止HTML被转义。我很确定你知道why 是否会/应该转义…:-)

但是,如果您只想让一个可单击的链接成为“帮助”文本,或者让它具有一些HTML,那么您可以传递WPElement 作为help 值:

const el = wp.element.createElement;

el( ToggleControl, {
    label: \'Toggle\',
    help: el( \'a\', { href: \'https://example.com\' }, \'This should work..\' ),
    ...
} );
如果您确实必须传递HTML字符串,那么可以使用dangerouslySetInnerHTML 属性/属性。但顾名思义,这很危险,因此请确保您的HTML尽可能安全。

下面是一个例子:

const el = wp.element.createElement;
const html = ( html ) => { return { __html: html } };

el( ToggleControl, {
    label: \'Toggle\',

    // This outputs: <span><a href="#">Foo</a> Bar</span>
    help: el( \'span\', {
        dangerouslySetInnerHTML: html( \'<a href="#">Foo</a> Bar\' )
    } ),

    ...
} );
或者在古腾堡,你可以使用wp.element.RawHTML() (将生成的元素放入div):

const el = wp.element.createElement;
const htmlToElem = ( html ) => wp.element.RawHTML( { children: html } );

el( ToggleControl, {
    label: \'Toggle\',

    // This outputs: <div><a href="#">Foo</a> Bar</div>
    help: htmlToElem( \'<a href="#">Foo</a> Bar\' ),

    ...
} );
无论如何,如何将HTML从PHP传递到上面的JS/GB脚本将取决于您。但基本上,您可以使用wp_localize_script() 定义要在脚本中使用的HTML列表。

相关推荐

JavaScript将焦点更改为正在重置的密码字段登录页面

我有一个特殊的情况,我希望用户在标准WordPress登录页面上输入密码。我用一行javascript填写用户名:document.getElementById(\'user_login\').value = \'username\'; 默认情况下,焦点从用户名字段开始。我想让焦点从密码字段开始。。。document.getElementById(\'user_pass\').focus(); 但这不起作用。看起来它可能会先关注密码字段,然后再返回用户名字段。知道为什么会发生这种情况以