使用 select 创建了一个表单
<form action="" method="post">
<select class="form-control" name="formx" onchange="location = this.value;">
<option value="http:/site.com/category#info">Информация</option>
</select>
</form>
一切正常。
在函数中创建了一个简码
function url_shortcode() {
return get_bloginfo('url');
}
add_shortcode('web_url','url_shortcode');
[web_url] 短代码适用于页面和帖子,但不适用于表单!即这个
<form action="" method="post">
<select class="form-control" name="formx" onchange="location = this.value;">
<option value="[web_url]/category#info">Информация</option>
</select>
</form>
我打开资源,那里的值为 [web_url],即不执行短代码。
是什么原因 ?因为我需要在表单中使用简码,选择。
短代码在处理时在内容中执行是合乎逻辑的,但是,它不会在其他地方执行,包括。在 WordPress 模板中,它们本质上是普通的 PHP 脚本。使用特殊函数do_shortcode来处理短代码。
https://developer.wordpress.org/reference/functions/do_shortcode/
自 4.2 版以来的 WordPress 禁止在 html 标签中使用短代码。
do_shortcode(контент_поста)
当处理帖子的内容时,核心中的一个函数wp-includes/shortcodes.php
。它调用do_shortcodes_in_html_tags()
,它使用以下转换将 html 元素中的所有方括号替换为 html 实体:这样做是为了使 html 语法允许的方括号不会破坏对帖子内容中短代码的识别。之后,处理短代码(插入 add_shortcode 中指定的自定义函数返回的结果)并将 html 实体转换回方括号。
因此,在 html 标记的任何位置(以及任何以撕下括号 < 开头的文本)都无法插入短代码 - 我试过了。
唯一的例外是 action=""。我不知道这是一个错误还是它的构思(需要对内核代码进行更深入的分析),但实际上
<form action="[web_url]>"
它有效,但<form action1="[web_url]">
它不再有效。