2016-06-23 8 views
0

Ich erstelle ein Formular mit Gravity Forms, wo Benutzer in der Lage sein werden, Art von Flugzeugen, verschiedene Flugstunden, Vergünstigungen und andere Add-ons zu ihrem Flug hinzufügen. Ich bearbeite die Kontrollkästchen in Gravity Forms mit einem benutzerdefinierten Post-Typ, den ich erstellt habe.Get featured Bild von Post einmal Gravitationsformen wählt diesen Beitrag

Sobald ein Benutzer wählt den Flug und andere verfügbare Vergünstigungen, links von ihren Auswahlen, bevölke ich ein HTML-Feld von GF, um {all_fields} anzuzeigen. Da die Kontrollkästchen in den Flugzeugen mit einem benutzerdefinierten Post-Typ gefüllt werden, möchte ich in der Lage sein, das vorgestellte Bild dieses Post-Typs zu übernehmen und es über dem Ort des HTML-Feldes anzuzeigen.

Der Code aufgeführt ist hier die Funktion ich diese Kontrollkästchen mit dem benutzerdefinierten Post-Typ füllen bin mit:

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

Also mein Ziel ist es, wenn der Benutzer entweder ein Large, Super-Mid, Mid oder Small Flugzeuge (und das sind die Kategorien) die nächste Seite der mehrseitigen GF wird nicht nur die Ebene anzeigen, die der Benutzer ausgewählt hat, was ist, aber ich möchte, dass es post/Flugzeuge vorgestellten Bild darüber angezeigt. Das Bild ändert sich also je nach ausgewähltem Flugzeug.

Hat jemand eine Idee, wie ich das vorgestellte Bild dieser Post-ID erhalten kann, je nachdem, was der Benutzer in GF auswählt?

UPDATE 24.06

so Ok, um mehr klar zu sein, was ich tue. Ich benutze Gravitationsformen Multi-Seite, um ein Formular zu erstellen, um Flugzeuge, Vergünstigungen, Stunden, Add-Ons usw. zu erhalten. Ich musste die Flugzeugseite des Formulars mit dem benutzerdefinierten Post-Typ füllen. Ich habe diese ausgefüllt, aber ich musste die Post-Informationen wie ein Featured Bild, Aircraft Name, Range, etc .. über dem tatsächlichen Eingang anzeigen. Ich habe das getan und bin zufrieden, aber ich musste das Bild des Posts ziehen, also wenn das Formular dann übermittelt wird und zur nächsten Seite des Formulars navigiert, würde es das Post-Featured-Bild zusammen mit allen anderen Feldern anzeigen, die ich ausgewählt habe.

In diesem Fall wählte ich ein Flugzeug aus, das den Titel anzeigt, und ich brauchte das vorgestellte Bild, um damit zu gehen. Ursprünglich musste dies eine AJAX Gravitationsform sein. Das Bild wurde nicht angezeigt und würde als undefiniert angezeigt, wenn ich das Konsolenprotokoll überprüfte, da ich auch Dinge mit jQuery umherbewege.

Sie können sagen, warum mache ich es so, nun, es ist genau das, was ich getan habe, weil dies mein erster Riss bei einem mehrseitigen GF ist, wo ich einen benutzerdefinierten Beitragstyp als Auswahl anzeigen musste.

Ok, da das Bild nicht angezeigt wurde, entschied ich, AJAX auf dem Formular zu deaktivieren, weil ich die Idee hatte, dass das Skript, das die filterbaren Kategorien der Flugzeuge ausspuckt, entfernt wurde. Ich hatte Recht, also habe ich AJAX ausgeschaltet und das Bild wird angezeigt. Meine Frage ist nun, wie kann ich dieses Skript in die AJAX-Anfrage für dieses bestimmte Formular aufnehmen.

Unten habe ich meine jQuery, um das Post-Bild in einem bestimmten Bereich anzuzeigen, sobald das Flugzeug ausgewählt wurde. 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);

Hier ist das Skript, das ich dachte, entfernt wurde:

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 
} 

daran denke ich bin nicht sicher, dass das Skript entfernt wird, aber AJAX ist eigentlich die benutzerdefinierten Felder entfernen, die ich vergeben bin als Teil und mit jQuery sie über die tatsächlichen Eingänge

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>'; 

Hier hinzufügen die jQuery, die ich über die Eingänge platzieren bin mit:

$('#field_6_2').after($('#aircraft-tax')); 
$('#aircraft-tax').after($('#aircraft-content')); 

Was kann ich tun, um zu verhindern, dass AJAX diese Informationen löscht? Wenn ich dies in die AJAX-Anfrage aufnehmen kann, dann werden die Bilder wie beim Einschalten von AJAX auf dem GF angezeigt.

**

UPDATE 3

**

fand ich meine Frage. Es stellt sich heraus, dass wenn ich Ajax in Gravity Forms aktiviere, es keine Vorlage hinzufügt, die ich ursprünglich auf die Seite geladen habe. Zum Beispiel habe ich eine partielle, die ich auf meiner Seite bin: get_template_part('partials/membership-template', 'aircraft'); Dies wird ursprünglich hinzugefügt, aber sobald ich zur nächsten Formularseite navigieren (weil es ein mehrseitiges Formular ist) diese Vorlage, die auf dem aufgerufen wird Seite wird entfernt.

Wie kann ich verhindern, dass diese Vorlage oder Teile davon entfernt werden, nachdem das Formular zur nächsten Formularseite navigiert wurde?

Antwort

0

Da Ihr Formular Benutzer eine Kategorie von Flugzeug auswählen (von Ihnen benutzerdefinierte Taxonomie) müssen Sie einen tatsächlichen Beitrag abrufen, um ein vorgestellten Bild anzuzeigen. Fügen Sie das hinzu, wo Sie Ihre Formularseite rendern.

$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'); 
} 

UPDATE: Falls falsch verstehe ich Ihre Frage: Die ID-Post auch in Ihrer Formulareingabe so get_the_post_thumbnail($entry[id-of-selection-field], 'image-size'); würde auch die Ausgabe Ihres Bild sein sollte.

UPDATE 2: Um Daten von einer Seite zur anderen zu erhalten hinzuzufügen auf die zweite Seite ein HTML-Feld, ein pre_render Filter verwenden:

add_filter('gform_pre_render_{form_id}', 'populate_html'); 

Dann GFFormDisplay verwenden, um die Seite zu bekommen. Durchlaufen Sie Formularfelder, um Ihre Post-ID zu erhalten und das Bild von dort zu erhalten.

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; 
} 
+0

Ich bin nicht ganz sicher, wie das funktionieren und das Bild anzeigen würde. Ich habe eine andere Datei, die den Post mit dem Bild auf dem Schwerkraftformular anzeigt, das ich über dem Eingabekästchen mit jquery hinzufüge. Das Problem, auf das ich noch einmal gestoßen bin, ist, dass ich das vorgestellte Bild des Posts auf der nächsten Seite des mehrseitigen Formulars mit dem ausgewählten Flugzeug anzeigen muss. Ich bin mir nicht sicher, wie ich das Post-Thumbnail anzeigen kann, basierend auf dem, was ausgewählt ist. –

+0

Siehe Aktualisierung. Besteht das Problem nur darin, dass die Informationen auf die zweite Seite gelangen und angezeigt werden? – dg4220

+0

Danke für deine Antwort, ich habe das schon mal versucht und es bekommt das Bild nicht für mich. Die Art, wie ich es gerade mache, ist, dass es versucht, den Ort des Bildes von einer ID auf einem HTML-Element zu bekommen, aber wenn ich zur nächsten Seite gehe, verschwindet dieses Element und dann erscheint es als undefiniert. –

Verwandte Themen