为了账号安全,请及时绑定邮箱和手机立即绑定

重力形式:动态创建字段集

重力形式:动态创建字段集

PHP
尚方宝剑之说 2023-04-21 15:04:59
我想让用户从下拉字段中选择自定义帖子类型并向其添加一些额外数据。例如:用户可以从列表中选择一部电影。对于那部电影,他可以添加一定数量的副本,直到他想借到为止。所以我一共有三个字段:带有电影的下拉字段数字字段日期字段我现在想为 WordPress 中的每部电影添加此字段集(自定义帖子类型)。因为我不知道我们在 WordPress 中有多少电影,所以我想动态生成字段。幸运的是,我从 Gravity Forms 找到了 Repeater (beta) 字段。使用该字段,用户可以根据需要添加/删除电影。演示和文档: https: //docs.gravityforms.com/repeater-fields/问题是,我需要用 WordPress 中的电影 CPT 填充第一个字段(下拉列表)。这是我当前的代码,用于生成表单中的转发器字段:// Adjust your form IDadd_filter( 'gform_form_post_get_meta_5', 'add_my_field' );function add_my_field( $form ) {    $movie_sku = GF_Fields::create( array(        'type'   => 'text',        'id'     => 1002, // The Field ID must be unique on the form        'formId' => $form['id'],        'required' => true,        'label'  => 'Movie',        'class'  => 'col-md-4',        'pageNumber'  => 1, // Ensure this is correct    ) );    $movie_amount = GF_Fields::create( array(        'type'   => 'text',        'id'     => 1007, // The Field ID must be unique on the form        'formId' => $form['id'],        'required' => true,        'label'  => 'Amount',        'pageNumber'  => 1, // Ensure this is correct    ) );    $movie_date = GF_Fields::create( array(        'type'   => 'text',        'id'     => 1001, // The Field ID must be unique on the form        'formId' => $form['id'],        'required' => true,        'label'  => 'Date',        'pageNumber'  => 1, // Ensure this is correct    ) );    $movie = GF_Fields::create( array(        'type'             => 'repeater',        'required'          => true,        'id'               => 1000, // The Field ID must be unique on the form        'formId'           => $form['id'],        'label'            => 'Add movie',        'addButtonText'    => 'Add Another movie',        'removeButtonText'=> 'Remove movie',        'pageNumber'       => 1, // Ensure this is correct        'fields'           => array( $movie_sku,$movie_amount, $movie_date), // Add the fields here.    ) );    $form['fields'][] = $movie;    return $form;}
查看完整描述

1 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

我想我找到了解决方案:


在第一个之前,GF_Fields::create我必须从第二个函数中复制以下代码:


$args = array(

        'orderby'       =>  'title',

        'order'         =>  'ASC',

        'numberposts'   => -1,

        'post_type'     => 'movie',

        'post_status'   => array('publish'),


        );


        $posts = get_posts( $args );


        $choices = array();


        foreach ( $posts as $post ) {


            $choices[] = array(

                'text'  => $post->post_title,

                'value' => $post->post_title

            );

        }

然后我必须GF_Fields::create像这样编辑第一个:


$movie_sku = GF_Fields::create( array(

    'type'   => 'select',

    'id'     => 1002, // The Field ID must be unique on the form

    'formId' => $form['id'],

    'required' => true,

    'label'  => 'Movie',

    'choices'  => $choices,

    'pageNumber'  => 1, // Ensure this is correct

) );

新部分是'choices'  => $choices,从上面的代码中获取数据的部分。当然,我必须将输入类型更改为 select: 'type'   => 'select',。


查看完整回答
反对 回复 2023-04-21
  • 1 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信