首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gravityforms -添加类别中间单选按钮域

Gravityforms -添加类别中间单选按钮域
EN

Stack Overflow用户
提问于 2021-04-26 06:06:40
回答 1查看 27关注 0票数 0

我正在使用我的模板中的functions.php填充Gravityforms字段,它的工作方式很不错,但我有一个字段是...这是个挑战。我已经能够很好地填充我的数据库中的选择,但是使用functions.php我不能控制字段显示区域的内容,例如,我可以为每个类别添加标题或标题。有没有一种方法可以程序化地调整显示?下面是我希望实现的一个示例

代码语言:javascript
复制
RadioButton Choice (Field ID 21)
    Dark Colors (category title)
        maroon (choice 1)
        navy blue (choice 2)
        black (Choice 3)
    Standard Colors (Category Title)
        Red (choice 4)
        blue (choice 5)
        gray (Choice 6)
    Light Colors )Category Title)
        pink (choice 7)
        sky blue (choice 8)
        white (Choice 9)

我只是在寻找一种方法来添加类别标题之间的选择。我的DB查询将类别作为响应的一部分,但我必须填充选择以提供数组的惟一选项。

我已经了解了在哪里可以添加额外的Gravityform字段,并让它们由相同的“单选”单选按钮选项控制,但是涉及的类别会根据我调用的动态填充选项的DB查询而变化,范围从1个类别到10个类别,在表单本身中不会有相关的字段,因为所有这些都在一个单选按钮字段下。

任何想法都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-27 00:22:26

我能够使用我在评论中发布的链接来提供解决方案。作为我“选择”的一部分

下面是用于预渲染以填充选项的函数。在本例中,我用产品图像填充了一个单选按钮字段,而不是默认的单选按钮

代码语言:javascript
复制
add_filter('gform_pre_render_1', 'populate_choices');
function populate_choices($form) {
    global $wpdb;

    // Now to get a list of the products I want to include on this radio-button
    $dataQ = "
        SELECT category, product_id, product_name 
        FROM product_table
        WHERE product_type = 'whatever I am looking for'
        ORDER BY category, product_name ASC
    ";
    $dataR = $wpdb->get_results($dataQ);
    $dataList = array();

    // get current protocol to use in Product Images
    $protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";

    // Rebuild URL for use with product image graphics
    $productImageUrl = $protocol.$_SERVER['HTTP_HOST'].'/wp-content/product_images/';

    // Generate list of choices for the radio-button, along with category headers
    foreach ($form['fields'] as $field) {
        if ($field->id == '32') { // 32 My specific radio-button field
            $category = "";
            foreach ($dataR as $data) {
                if ($category != $data->category) {
                    // If I hit a new category, add the "header" item to the "choices" list with a unique search item to identify it, in this case "###"
                    $category = $data->category;
                    $dataList[] = array(
                        'text' => '#'.$category."#",
                        'value' => ''
                    );
                }
                $productImage = str_replace(" ","",strtolower($data->product_name)).".jpg";
                $productID = $data->product_id;
                $dataList[] = array(
                    'text' => $data->product_name,
                    'value' => $productID,
                    'isSelected' => false,
                    'price' => '0.00',
                    'imageChoices_image' => $productImagehUrl.$productImage
                );
            }
            $field->choices = $dataList;
        }
    }
}

然后,我添加了一个特定的字段修饰符,用html更新"#category#“选项元素,以显示类别名称。

代码语言:javascript
复制
// numbers after filter = "1" for form ID 1, "32" for field ID 32
add_filter('gform_field_choice_markup_pre_render_1_32', function( $choice_markup, $choice) {
    if ( strpos( $choice['text'], '#' ) === 0 ) {
        $categoryName = str_replace("#","",$choice['text']);
        $choice_markup = '
        <li style="width:100%;text-align:left;">
            <span style="color:#000000;font-weight:bold;font-size:18px;">
                <br>
                '.$categoryName.'
            </span>
        </li>
       ';
    }
    return $choice_markup;
}, 10, 2);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67258695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档