无法在联系人表单7中设置选择选项的值

时间:2018-01-30 06:20:41

标签: 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>

我的短代码是:

[select* Construction class:form-control "Masonry|opt1" "Frame|opt2" "Mixed Masonry-Frame|opt3"]

但我得到的只是:

<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>

我只是遵循了https://contactform7.com/selectable-recipient-with-pipes/

中使用的模式

注意:WPCF7_USE_PIPE设置为true。

1 个答案:

答案 0 :(得分:0)

您可能不再需要它了,但是今天我遇到了同样的问题。

我通过过滤 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 ($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);

编辑:

在后端, [标签] 将替换为值,而不是标签。但是,如果您仍然希望在电子邮件中显示标签,则可以通过重新创建(反转)CF7管道来实现。这样,您实际上可以选择使用哪个。 [tag] 将显示标签,而 [_ raw_tag] 将显示值。

我已经编辑了上面的代码以反映这一点。当然是可选的。