我正在使用Gravity Forms创建表单,用户可以在其中选择飞机类型,为其航班添加不同的飞行时间,特权和其他附加组件。我正在使用我创建的自定义帖子类型填充Gravity Forms中的复选框字段。
一旦用户选择了可用的航班和其他优惠,在他们选择的左侧,我将从GF填充HTML字段以显示{all_fields}
。由于飞机复选框是由自定义帖子类型填充的,我希望能够抓取该帖子类型的特色图像,然后将其显示在HTML字段的位置上方。
此处列出的代码是我用来填充自定义帖子类型的复选框的函数:
add_filter( 'gform_pre_render_6', 'ldm_do_bac_aircraft_large' );
add_filter( 'gform_pre_validation_6', 'ldm_do_bac_aircraft_large' );
add_filter( 'gform_pre_submission_filter_6', 'ldm_do_bac_aircraft_large' );
add_filter( 'gform_admin_pre_render_6', 'ldm_do_bac_aircraft_large' );
function ldm_do_bac_aircraft_large( $form ) {
foreach ( $form['fields'] as &$field ) {
if ( strpos( $field->cssClass, 'bac-aircraft-large' ) === false ) {
continue;
}
$posts = get_posts( array(
'numberposts' => -1,
'post_status' => 'publish',
'post_type' => 'ldm_build_card',
'order' => 'ASC',
'tax_query' => array(
array(
'taxonomy' => 'ldm_build_card_categories',
'field' => 'slug',
'terms' => array( 'large' ),
),
),
) );
$choices = array();
foreach ( $posts as $post ) {
$choices[] = array( 'text' => $post->post_title, 'value' => $post->post_title );
}
$field->choices = $choices;
}
return $form;
}
所以我的目标是当用户选择Large
,Super-Mid
,Mid
或Small
飞机(以及那些类别)时,下一页多页GF不仅会显示用户选择的那个平面,也可以显示该平面,但是我想让它显示上面的帖子/飞机特色图片。因此,图像将根据所选的飞机而改变。
有没有人知道如何根据用户在GF中选择的内容获取该帖子ID的精选图像?
更新6/24
好的,以便更清楚我正在做什么。我使用重力形式多页创建一个表格来获得飞机,特权,小时,附加组件等。我需要使用自定义帖子类型填充表格的飞机“页面”。我有这些填充但我需要显示帖子信息,如特色图像,飞机名称,范围等...实际输入之上。我已经做到了并且满意但是我需要拉出帖子的图像,所以当提交表单并导航到表单的下一页时,它会显示Post Featured Image以及我选择的所有其他字段。 / p>
在这种情况下,我选择了一台显示标题的飞机,我需要特色图片。最初这需要是一个AJAX重力形式。当我检查控制台日志时,图像不会显示并显示为未定义,因为我也在使用jQuery移动它。
你可能会说我为什么要这样做,这就是我决定做的事情,因为这是我在多页GF的第一次破解,我需要在其中显示自定义的帖子类型作为选择。
好的,因为图像没有显示,我决定关闭表单上的AJAX,因为我有这个想法,即正在删除飞行中可过滤类别的脚本。我是对的所以我关闭了AJAX,现在显示图像。所以现在我的问题是如何将此脚本包含在此特定表单的AJAX请求中。
下面我有我的jQuery,一旦选择了飞机,就会在特定区域显示帖子图像。
var checkboxValue = $('#gform_page_6_1 input[type=checkbox]:checked').val();
var aircraftSelect = $('#membershipAircrafts').find('[data-aircraft-title="'+checkboxValue+'"]');
var aircraftImage = $(aircraftSelect).find( '.membership-aircraft-image' );
console.log( aircraftImage );
$('.summary-image').html( aircraftImage );
现在这里是我认为被删除的脚本:
function ldm_add_membership_aircrafts() {
?>
<script type="text/template" id="single-membership-listings">
<% _.each( membershipAircrafts, function( membershipAircraft ) { %>
<div id="aircraft<%= membershipAircraft.id %>" class="single-membership-inner clearfix col-sm-4" data-aircraft-title="<%= membershipAircraft.title %>">
<% if( membershipAircraft.imageURL ) { %>
<img class="membership-aircraft-image" src="<%= membershipAircraft.imageURL %>" alt="<%= membershipAircraft.title %>" />
<div class="single-membership-content-container">
<% } else { %>
<div class="single-membership-content-container">
<% } %>
<div class="single-membership-title"><%= membershipAircraft.title %></div>
<div class="single-membership-range">
<p id="membership-label">Range:</p>
<p id="membership-range-content"><%= membershipAircraft.range %></p>
</div>
<div class="single-membership-passengers">
<p id="membership-label">Passengers:</p>
<p id="membership-passengers-content"><%= membershipAircraft.passengers %></p>
</div>
<div class="single-membership-baggage">
<p id="membership-label">Luggage Capacity:</p>
<p id="membership-baggage-content"><%= membershipAircraft.baggage %></p>
</div>
<div class="single-membership-cabinDimensions">
<p id="membership-label">Cabin Dimensions:</p>
<p id="membership-cabinDimensions-content"><%= membershipAircraft.cabinDimensions %></p>
</div>
</div>
</div>
<% }); %>
</script>
<script type="text/template" id="single-categories-listings">
<% var categoryName; %>
<% var count = 0; %>
<div class="membership-categories-inner">
<% _.each( membershipCategories, function( membershipCategory ) { %>
<% if( count !== 0 && categoryName !== membershipCategory.taxonomy ) { %>
</div>
<% } %>
<div data-term-id="<%= membershipCategory.id %>" class="single-membership-category <%= membershipCategory.termName %><% if( count === 0 ){ %> category-active <% } %>"><%= membershipCategory.termName %></div>
<% categoryName = membershipCategory.taxonomy; %>
<% count++; %>
<% }); %>
</div>
</div>
</script>
<?php
}
考虑一下我不确定脚本是否被删除但是AJAX实际上删除了我作为部分放置的自定义字段并使用jQuery将它们添加到实际输入之上
echo '<li id="aircraft-tax" class="gfield">';
echo '<div class="row">';
echo '<div class="col-sm-12">';
echo '<div id="membershipCategories" class="membership-categories"></div>';
echo '</div>';
echo '</div>';
echo '</li>';
echo '<li id="aircraft-content" class="gfield">';
echo '<div class="row">';
echo '<div class="col-sm-10 col-sm-offset-1">';
echo '<div id="membershipAircrafts" class="membership-aircrafts"></div>';
echo '</div>';
echo '</div>';
echo '</li>';
以下是我用于放置在输入上方的jQuery:
$('#field_6_2').after( $('#aircraft-tax') );
$('#aircraft-tax').after( $('#aircraft-content') );
如何防止AJAX删除此信息。如果我可以将其包含在AJAX请求中,那么我觉得如果我在GF上关闭AJAX,图像就会显示出来。
**
更新3
**
我发现了我的问题。事实证明,当我在Gravity Forms上启用ajax时,它不会添加我最初在页面上加载的模板。例如,我在我的页面上包含了部分内容:
get_template_part( 'partials/membership-template', 'aircraft' );
这是最初添加的,但是一旦我导航到下一个表单页面(因为它是一个多页面表单),这个在页面上调用的模板就会被删除。
那么在表单导航到下一个表单页面后,如何保持此模板或部分模板不被删除?
答案 0 :(得分:0)
由于您的表单让用户选择了一个类别的平面(来自您的自定义分类),您需要获得一个实际的帖子才能显示特色图片。在渲染表单页面的地方添加它。
$args = array(
'posts_per_page' => 1,
'post_type' => 'ldm_build_card',
'ldm_build_card_categories' => 'large',//or selected type
'post_status' => 'publish'
);
$show_image = get_posts( $args );
if( $show_image ) {
get_the_post_thumbnail( $show_image[0]->ID, 'image-size');
}
更新:如果我误解了你的问题:
帖子ID也应该在您的表单输入中,因此get_the_post_thumbnail( $entry[id-of-selection-field], 'image-size');
也会输出您的图片。
更新2: 要将数据从一个页面添加到另一个页面,请将html字段添加到第二页,使用pre_render过滤器:
add_filter( 'gform_pre_render_{form_id}', 'populate_html' );
然后使用GFFormDisplay
获取该页面。遍历表单字段以获取您的帖子ID并从那里获取图像。
function populate_html( $form ) {
//this is a 2-page form with the data from page one being displayed in an html field on page 2
$current_page = GFFormDisplay::get_current_page( $form['id'] );
$html_content = "The information you have submitted is as follows:<br/><ul>";
if ( $current_page == 2 ) {
foreach ( $form['fields'] as &$field ) {
//gather form data to save into html field (id 3 on my form), exclude page break
foreach ( $field->inputs as $input ) {
if ($input['id'] == {selected-plane-input}) {
$input_name = 'input_' . str_replace( '.', '_', $input['id'] );
$value = rgpost( $input_name );
$html_content .= '<p>' . wp_get_attachment_url( get_post_thumbnail_id($value)). '</li>';
}
}
}
}
foreach ( $form['fields'] as &$field ) {
if ( $field->id == {your-html-field-id} ) {
//set the field content to the html
$field->content = $html_content;
}
}
return $form;
}