我正在使用我的模板中的functions.php填充Gravityforms字段,它的工作方式很不错,但我有一个字段是...这是个挑战。我已经能够很好地填充我的数据库中的选择,但是使用functions.php我不能控制字段显示区域的内容,例如,我可以为每个类别添加标题或标题。有没有一种方法可以程序化地调整显示?下面是我希望实现的一个示例
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个类别,在表单本身中不会有相关的字段,因为所有这些都在一个单选按钮字段下。
任何想法都将不胜感激。
发布于 2021-04-27 00:22:26
我能够使用我在评论中发布的链接来提供解决方案。作为我“选择”的一部分
下面是用于预渲染以填充选项的函数。在本例中,我用产品图像填充了一个单选按钮字段,而不是默认的单选按钮
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#“选项元素,以显示类别名称。
// 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);https://stackoverflow.com/questions/67258695
复制相似问题