【问题标题】:Programmatically construct a dynamic dropdown field in Contact Form 7以编程方式在 Contact Form 7 中构建动态下拉字段
【发布时间】:2019-01-18 18:52:39
【问题描述】:

我在这里和搜索引擎四处寻找,但不幸的是我找不到适合自己的解决方案。

所以,我现在就需要为 Contact Form 7 WordPress 插件自定义的功能寻求帮助。该函数来自another question

在下拉菜单(选择)中,我需要在一个选项字段中提供两个详细信息(车间名称和日期)。两个详细信息都来自自定义帖子类型的同一个帖子。第一个细节是 post_title,第二个是 Meta-Box 插件的自定义字段。

以下函数原则上有效,但它只返回一个或另一个细节。可能解决方案在 foreach 构造中。但我不知道它是如何工作的。

非常感谢您的支持!

[更新 2018-08-12] 经过进一步研究,我在this post找到了解决方案,并相应地更改了功能。

解决方案应如下所示:

<select>
<option value="workshop name – date">workshop name – date</option>
...
</select>

这是函数:

add_filter( 'wpcf7_form_tag', 'dynamic_field_choose_workshop', 10, 2);

function dynamic_field_choose_workshop ( $tag, $unused ) {

    if ( $tag['name'] != 'workshop' )
        return $tag;

    $args = array (
        'post_type'     => 'workshop',
        'post_status'   => 'publish',
        'orderby'       => 'name',
        'order'         => 'ASC',
        'numberposts'   => - 1,
    );

    $custom_posts = get_posts($args);

    if ( ! $custom_posts )
        return $tag;

    foreach ( $custom_posts as $custom_post ) {
    $ID = $custom_post->ID;
        $tag['values'][] = $custom_post->post_title . ' - ' . rwmb_get_value('workshop_meta_boxes_date', '', $ID);
        $tag['raw_values'][] = $custom_post->post_title . ' - ' . rwmb_get_value('workshop_meta_boxes_date', '', $ID);
        $tag['labels'][] = $custom_post->post_title . ' - ' . rwmb_get_value('workshop_meta_boxes_date', '', $ID);
    }

    return $tag;

}

【问题讨论】:

    标签: wordpress drop-down-menu contact-form-7 programmatically-created


    【解决方案1】:

    有 CF7 扩展程序可以为您做到这一点。查看Smart Grid-Layout for CF7,它引入了一个名为dynamic_dropdown 的新标签。这就是你想要使用的。 dynamic_dropdown 创建一个选择字段,并允许您使用分类法、帖子类型的标题或过滤器来填充字段选项。您想使用过滤器选项根据您的要求实际构建选项。标签弹出窗口是不言自明的,但是如果您遇到困难,请在下面发表评论,我会给您更多提示。

    使用下面的 dynamic_dropdown 标签,

    [dynamic_select workshop-date-select class:select2 "source:filter"]
    

    它会创建一个&lt;select name="workshop-date-select"&gt; 下拉字段,该字段将在前端转换为select2 jquery field,并使用放置在functions.php 文件中的以下函数动态创建其值,

    add_filter('cf7sg_dynamic_dropdown_custom_options', 'filter_options',10,3);
    function filter_options($options, $field_name, $form_key){
      /*first we verify if this is the right field from the right form
      in case multiple forms with similar fieldd exiss.
      the $form_key is a unique key exposed by the Smart Grid-layout plugin 
      instead of using form IDs to make forms and code more portable across servers.*/
      if($form_key != 'my-form' && $field_name != 'workshop-date-select') return $options; 
      $options = array();
      //load your options programmatically, as $value=>$name pairs.
      $args = array (
        'post_type'     => 'workshop',
        'post_status'   => 'publish',
        'orderby'       => 'name',
        'order'         => 'ASC',
        'numberposts'   => - 1,
      );
      $workshops = get_posts( $args );
      foreach($workshops as $workshop){
        $val = $workshop->post_title . ' - ' . rwmb_get_value('workshop_meta_boxes_date', '', $workshop->ID);
        $options[$val]=$val;
      }
      return $options;
    }
    

    这将在前端创建所需的下拉选择字段。

    注意事项:我会将选项值填充为研讨会帖子 ID,而不是与选项标签相同的文本。提交表单后,帖子 ID 的值可用于在通知电子邮件中填充所需的研讨会标题和日期。这为将来扩展报告的信息提供了更大的灵活性。

    【讨论】:

    • 感谢您提示您的 WP 插件。现在它工作正常,我想在没有另一个插件的情况下做到这一点。但我会保存链接。 ;-)
    • 你是 wc @MikaL。它的设计就是为了解决这类问题。
    猜你喜欢
    • 2020-11-24
    • 2020-04-17
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 2021-06-12
    • 2020-09-01
    • 2019-04-02
    相关资源
    最近更新 更多