Gutenberg Shortcode Fail

时间:2019-07-18 作者:lost.in.userspace

WP 5.2.2

是否可以在古腾堡短代码块之外渲染短代码?

我创建了一个短代码,多年来一直在几页上使用它。在那些页面上效果很好。。。我害怕编辑它们,害怕它们被破坏:/

我创建了一个新页面,我想在其上使用短代码。但是,未处理短代码。我尝试过通过代码编辑器插入它,并在html块中使用它。无论哪种方式,它都无法渲染。

如果我创建一个短代码块并将我的短代码放在其中,它就会工作。然而,由于我使用短代码来填充隐藏的表单字段,我不相信这个选项对我有用。我的测试中没有。

示例:

 <form action="https://www.example.com/process.php" method="post">
    <input name="name" value="[current_user]" type="hidden">
    <input name="currency" value="USD" type="hidden">
    <input name="tax" value="0" type="hidden">
    <input name="btn" value="mybutton" type="hidden">
 </form>
我的短代码:

function custom_shortcode_func() {
    ob_start();
    $current_user = wp_get_current_user();
    echo $current_user->user_login;
    $output = ob_get_clean();
    return $output;
}
add_shortcode(\'current_user\', \'custom_shortcode_func\');

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

短代码不起作用,因为它被包装在引号中&mdash;"[current_user]". 但更好的解释是,因为它位于HTML属性中。

这不是古腾堡或块编辑器的问题;即使有<?php echo do_shortcode( \'<input name="name" value="[current_user]" type="hidden">\' ); ?>, 短代码仍将保持原样。因为HTML属性中不允许使用短代码&mdash;参见以下摘录自Codex:

从4.2.3版开始,HTML中的短代码的使用也受到了类似的限制。例如,此短代码无法正常工作,因为它嵌套在脚本属性中:

<a onclick="[tag]">

不过,有一个快速(肮脏)的解决办法;不要用引号括起来:

<input name="name" value=[current_user] type="hidden">
但这会导致无效的HTML(未包装的属性值),因此我只需创建一个输出整个form:

function custom_shortcode_func2() {
    $current_user = wp_get_current_user();
    $user_login = isset( $current_user->user_login ) ?
        $current_user->user_login : \'\';

    ob_start();
    ?>
        <form action="" method="post">
            <input name="name" value="<?php echo esc_attr( $user_login ); ?>" type="hidden">
            <input name="currency" value="USD" type="hidden">
            <input name="tax" value="0" type="hidden">
            <input name="btn" value="mybutton" type="hidden">
        </form>
    <?php
    return ob_get_clean();
}
add_shortcode( \'my_form\', \'custom_shortcode_func2\' );
或者只是<input> 标签:

function custom_shortcode_func3() {
    $current_user = wp_get_current_user();
    $user_login = isset( $current_user->user_login ) ?
        $current_user->user_login : \'\';

    return sprintf( \'<input name="name" value="%s" type="hidden">\',
        esc_attr( $user_login ) );
}
add_shortcode( \'input_current_user\', \'custom_shortcode_func3\' );
顺便说一句,参考您原来的shortcode函数,不需要使用输出缓冲(那些ob_ 功能)。只需返回$current_user->user_login .. :)

相关推荐

Geoip shortcodes in comments

我想知道如何从geoip插件添加国家/地区短代码(https://pl.wordpress.org/plugins/geoip-detect/) 输入注释字段。[geoip\\u detect2 property=“country”]据我所知,注释字段必须是所见即所得字段(默认情况下不是文本)。还有其他方法吗?通过自定义php函数或其他方式?你好,Michal