Rag*_*i U 4 php wordpress contact-form-7
我正在尝试为 CF7 中的选择下拉列表添加选项值。我正在使用以下短代码来生成 HTML,例如
<select name="Construction" class="form-control">
<option value="opt1">Masonry</option>
<option value="opt2">Frame</option>
<option value="opt3">Mixed Masonry-Frame</option>
</select>
Run Code Online (Sandbox Code Playgroud)
我的简码是:
[select* Construction class:form-control "Masonry|opt1" "Frame|opt2" "Mixed Masonry-Frame|opt3"]
Run Code Online (Sandbox Code Playgroud)
但我得到的只是:
<select name="Construction" class="form-control">
<option value="Masonry">Masonry</option>
<option value="Frame">Frame</option>
<option value="Mixed Masonry-Frame">Mixed Masonry-Frame</option>
</select>
Run Code Online (Sandbox Code Playgroud)
我只是遵循https://contactform7.com/selectable-recipient-with-pipes/中使用的模式
注意:WPCF7_USE_PIPE 设置为 true。
您可能不再需要它,但我今天遇到了同样的问题。
我通过过滤wpcf7_form_tag解决了这个问题。
在我看来,这是比使用 JS 更好的解决方案,因为在呈现任何表单 HTML 之前,这些值将在服务器端更改。
示例实现应该使管道按照您想要的方式工作:
function so48515097_cf7_select_values($tag)
{
if ($tag['basetype'] != 'select') {
return $tag;
}
$values = [];
$labels = [];
foreach ($tag['raw_values'] as $raw_value) {
$raw_value_parts = explode('|', $raw_value);
if (count($raw_value_parts) >= 2) {
$values[] = $raw_value_parts[1];
$labels[] = $raw_value_parts[0];
} else {
$values[] = $raw_value;
$labels[] = $raw_value;
}
}
$tag['values'] = $values;
$tag['labels'] = $labels;
// Optional but recommended:
// Display labels in mails instead of values
// You can still use values using [_raw_tag] instead of [tag]
$reversed_raw_values = array_map(function ($raw_value) {
$raw_value_parts = explode('|', $raw_value);
return implode('|', array_reverse($raw_value_parts));
}, $tag['raw_values']);
$tag['pipes'] = new \WPCF7_Pipes($reversed_raw_values);
return $tag;
}
add_filter('wpcf7_form_tag', 'so48515097_cf7_select_values', 10);
Run Code Online (Sandbox Code Playgroud)
编辑:
在后端,[tag]将被值替换,而不是 label。但如果您仍然希望在电子邮件中显示标签,那么也可以通过重新创建(反转)CF7 管道来实现。这样,您实际上可以选择使用哪一个。[tag]将显示标签,[_raw_tag]将显示值。
我编辑了上面的代码来反映这一点。当然这是可选的。
| 归档时间: |
|
| 查看次数: |
11078 次 |
| 最近记录: |