2017-07-17 2 views
0

UPDATE:Muss ich jedes Mal eine Schleife ausführen, wenn ich eine bestimmte Liste von Daten in WordPress abrufen möchte?

Ich bin in der Lage, die Schleife am Anfang der Seite auszuführen, aber sobald ich aus der Schleife (endwhile;) beenden, kann ich mein Datenfeld trotzdem nicht platzieren . Meine Daten können nirgendwo platziert werden, sobald ich die Schleife schließe.

Also lassen Sie uns sagen, dass ich versuchen werde:

<?php /* Template Name: memberplatform */ ?> 
<?php $current = $_SERVER["REQUEST_URI"]; ?> 
<?php get_header(); ?> 
<?php $temp_query = $wp_query; 
query_posts("cat=2&showposts=20"); 
while (have_posts()) : the_post(); 
$membername = get_post_meta($post->ID, 'name', true); 
$memberemail = get_post_meta($post->ID, 'email', true); 
$members = []; 
if (! empty($membername)) { 
    $members[] = '<option value="' . $memberemail . '">' . get_post_meta($post->ID, 'name', true) .'</option>'; 
    echo implode($members); 

} 
endwhile; 
?> 

und dann in Form bin ich versuche, meine Array wie das Echo:

<select class="drops" name="smallsan"> 
    <?php echo implode($members); ?> 
</select> 

ich innerhalb der Schleife meine Array erhalten , also an erster Stelle, aber ich kann mein Dropdown mit meinen Ergebnissen nicht füllen.

ORIGINAL PROBLEM:

Ich brauche eine Liste Merkmale von Menschen abzurufen, die ich bereits ein benutzerdefiniertes Feld in Wordpress gegeben habe, zum Beispiel der E-Mail oder ihre Firmennamen, so dass sie in einem Option-Tag zum Anzeigen in ein Dropdown-Menü in einem Formular auswählen.

So weit so gut, aber da muss ich zwei verschiedene Felder angezeigt werden (von einer Person auf eine andere Person) ich auf diese Weise zwei verschiedene Schlaufen laufen hatte:

<form role="form" class="contactForm contact-form form-horizontal"> 
    <div class="form-group"> 
     <div class="controls"> 
      <label class="col-sm-2 control-label"> Your Name (required)</label> 
      <div class="col-sm-10"> 
       <select class="drops" name="smallsan"> 
        <?php $temp_query = $wp_query; ?> 
        <?php query_posts("cat=2&showposts=20"); ?> 
        <?php while (have_posts()) : the_post(); ?> 
         <?php 
         $membername = get_post_meta($post->ID, 'name', true); 
         $memberemail = get_post_meta($post->ID, 'email', true); 
         if (! empty($membername)) { 
          echo '<option value="' . $memberemail . '">' . get_post_meta($post->ID, 'name', true) .'</option>'; 
         } 
         ?> 
         <?php 

         endwhile; 
         ?> 
        </select> 
        <div class="help-block with-errors"></div> 
       </div> 
      </div> 
      <div class="controls"> 
       <label class="col-sm-2 control-label">Referring to</label> 
       <div class="col-sm-10"> 

        <select class="drops" name="smallsan"> 
         <?php $temp_query = $wp_query; ?> 
         <?php query_posts("cat=2&showposts=20"); ?> 
         <?php while (have_posts()) : the_post(); ?> 
          <?php 
          $membername = get_post_meta($post->ID, 'name', true); 
          $memberemail = get_post_meta($post->ID, 'email', true); 
          if (! empty($membername)) { 
           echo '<option value="' . $memberemail . '">' . get_post_meta($post->ID, 'name', true) .'</option>'; 
          } 
          ?> 
          ?> 
          <?php 

          endwhile; 
          ?> 
         </select> 
        </div> 
       </div> 

und so weiter.

Ich habe versucht, die Schleife nur ganz oben auszuführen, um beide Abschnitte zu füttern, aber es hat nicht funktioniert, weil ich auf diese Weise nur einen Wert abrufen konnte (nicht alle Mitglieder mit ihrer E-Mail):

<form role="form" class="contactForm contact-form form-horizontal"> 
    <?php $temp_query = $wp_query; ?> 
    <?php query_posts("cat=2&showposts=20"); ?> 
    <?php while (have_posts()) : the_post(); ?> 
     <select class="drops" name="smallsan"> 
      <?php 
      $membername = get_post_meta($post->ID, 'name', true); 
      $memberemail = get_post_meta($post->ID, 'email', true); 
      if (! empty($membername)) { 
       echo '<option value="' . $memberemail . '">' . get_post_meta($post->ID, 'name', true) .'</option>'; 
      } 
      ?> 
      <?php 

      endwhile; 
      ?> 
     </select> 
     <div class="help-block with-errors"></div> 
    </div> 
</div> 
<div class="controls"> 
    <label class="col-sm-2 control-label">Referring to</label> 
    <div class="col-sm-10"> 

     <select class="drops" name="smallsan"> 

       <?php 
       $membername = get_post_meta($post->ID, 'name', true); 
       $memberemail = get_post_meta($post->ID, 'email', true); 
       if (! empty($membername)) { 
        echo '<option value="' . $memberemail . '">' . get_post_meta($post->ID, 'name', true) .'</option>'; 
       } 
       ?> 
       ?> 
       <?php 

       endwhile; 
       ?> 
      </select> 
     </div> 
    </div> 

Ist es richtig? Gibt es eine andere Möglichkeit zu vermeiden, die Schleife zu duplizieren (DRY) und den Prozess zu ersticken und den Code sauberer zu machen?

Antwort

1

Sie brauchen nicht zwei Schleifen benötigen. Im ersten Schritt durchlaufen Sie einmal Ihre Posts, holen sich die benutzerdefinierten Felder und speichern sie als HTML-Option formatiert in einem Array. Im zweiten Schritt drucken Sie Ihr Array mehrfach.

Hier biete ich ein Beispiel-Code:

<?php query_posts("cat=2&showposts=20"); 
$members = []; 
while (have_posts()) 
{ 
    the_post(); 
    $membername = get_post_meta($post->ID, 'name', true); 
    $memberemail = get_post_meta($post->ID, 'email', true); 


    if (! empty($membername)) { 
     $members[] = '<option value="' . $memberemail . '">' . get_post_meta($post->ID, 'name', true) .'</option>'; 
    } 
} 

?> 

<form role="form" class="contactForm contact-form form-horizontal"> 
    <div class="form-group"> 
     <div class="controls"> 
      <label class="col-sm-2 control-label"> Your Name (required)</label> 
      <div class="col-sm-10"> 
       <select class="drops" name="smallsan"> 
        <?php echo implode($members); ?> 
       </select> 
       <div class="help-block with-errors"></div> 
       </div> 
      </div> 
     </div> 
     <div class="controls"> 
      <label class="col-sm-2 control-label">Referring to</label> 
      <div class="col-sm-10"> 

       <select class="drops" name="smallsan"> 
        <?php echo implode($members); ?> 
       </select> 
      </div> 
     </div> 
    </div> 
</form> 
+0

Ich habe versucht, den Code zu verwenden, aber es hat nicht funktioniert, sobald ich die Schleife geschlossen wird es nur ein Ergebnis drucken, also habe ich versucht zu beenden es am Ende des Codes, aber immer noch wird es nicht funktionieren – Matto

+0

versuchen, var_dump ($ Mitglieder). –

+0

Wo oder wie soll ich den Code eingeben? – Matto

Verwandte Themen