我正在尝试创建一个简单的快捷码,它允许我在页面上显示一个下拉列表,并根据所选选项显示特定的联系人表单。
后端的短代码:[formularze form="561,559,560" name="Form 1, Form 2, Form 3"]“form”属性是联系人表单7 ID,“name”属性是下拉列表的名称。
代码:
function formularze_func( $atts ) {
$a = shortcode_atts( array(
\'form\' => \'\',
\'name\' => \'\',
), $atts );
$form = $a[\'form\'];
$name = $a[\'name\'];
$ids_array = explode(\',\', $form);
$names_array = explode(\',\', $name);
$dropdown = "<select id=\\"selectForm\\">";
for($i=0;$i<count($ids_array);$i++) {
$dropdown .= "<option value=\\"";
$dropdown .= $i;
$dropdown .= "\\">";
$dropdown .= $names_array[$i];
$dropdown .= "</option>";
}
$dropdown .= "</select>";
$formDiv = "<div id=\\"form\\"></div>";
$formDisplay = "
<script>
var dropdown = document.getElementById(\\"selectForm\\");
var value = dropdown.options[dropdown.selectedIndex].value;
var formId = " . json_encode($ids_array(\\\\\\\\TOTALLY STUCK HERE\\\\\\\\)) . "
document.getElementById(\\"form\\").innerHTML = \\"[contact-form-7 id=\\"formId\\"]\\";
</script>
";
$ready = $dropdown . $formDiv . $formDisplay;
if( count($ids_array) == count($names_array) ) {
return $ready;
} else return "Error.";
}
add_shortcode( \'formularze\', \'formularze_func\' );
代码可能不是世界上最漂亮的,所以我很高兴有任何改进。
问题出在这里-\\\\完全卡在这里\\\\我如何将JS变量传递到那里value?
最合适的回答,由SO网友:Igor Sorish 整理而成
你不能为这样的改变添加逻辑。您需要使用js对用户“前端”事件做出反应。
此外,这种构造也会出错:
document.getElementById(\\"form\\").innerHTML = \\"[contact-form-7 id=\\"formId\\"]\\";
将始终打印[contact-form-7 id=\\“formId\\”],因为js本身不能执行\\u shortcode函数。
如果要使其变得简单(无需ajax过程),您需要:
1) 使用php打印所有表单,样式为“显示:无
2) 添加onchange select事件
3) 更改选项时“显示”所需表单
打印表单的快速示例:
$formDivs = \'\';
forearch($ids_array as $i=>$id) {
$formDivs .= do_shortcode("<div id=\\"form_{$i}\\" style="display: none;">[contact-form-7 id=\\"{$id}\\"]</div>");
}