一旦重力表格选择帖子

时间:2016-06-23 14:10:55

标签: wordpress custom-post-type gravity-forms-plugin

我正在使用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;
}

所以我的目标是当用户选择LargeSuper-MidMidSmall飞机(以及那些类别)时,下一页多页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' ); 这是最初添加的,但是一旦我导航到下一个表单页面(因为它是一个多页面表单),这个在页面上调用的模板就会被删除。

那么在表单导航到下一个表单页面后,如何保持此模板或部分模板不被删除?

1 个答案:

答案 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;
}