【问题标题】:Can't set values for select option in Contact form 7无法在联系表 7 中设置选择选项的值
【发布时间】:2022-02-25 15:15:27
【问题描述】:

我正在尝试为 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。

【问题讨论】:

  • 换行试试
  • 插件开发人员也没有任何完美的解决方案。但是一位开发人员使用 jquery 自行修复。如果你想试试:wordpress.org/support/topic/contact-form-7-pipes-not-working-3
  • answer中的另一个重要评论
  • @Mikethetechy 我已经试过了。它没有帮助
  • @ShaunakShukla 我之前读过。我遵循了 CF7 文档,但它没有解决我的问题。

标签: php wordpress contact-form-7


【解决方案1】:

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

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

编辑:

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

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

【讨论】:

  • 是否应该在第 11 行改为 if (count($raw_value_parts) &gt;= 2) {?谢谢你,为我节省了很多时间!
  • 是的,必须是这样!不知道我在这里发帖时是怎么错过的。我会改的。
【解决方案2】:

这仅适用于服务器端。根据文档,这是为了防止将值发送到浏览器客户端。

我在 question 上发现了 Herbert Van-Vliet 的评论

因此,在提交时,您将获得您通过管道运算符(“|”)定义的确切值

【讨论】:

    猜你喜欢
    • 2018-06-09
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多