短代码不起作用,因为它被包装在引号中—"[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
.. :)