2017-07-17 9 views
0

更新:wordpressの特定のデータリストを取得するたびにループを実行する必要がありますか?

私はページの一番上でループを実行できますが、ループを終了すると(endwhile;)、私はデータの配列をとにかく配置できません。私のデータは、ループを閉じるとすぐにどこにでも置くことはできません。

<?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; 
?> 
、その後、私はそのような私の配列をエコーし​​ようとしてるの形で:

それでは、私がしようとするとしましょう

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

私は、ループ内で私の配列を取得することができます最初の場所では、しかし、私は自分の結果をドロップダウンに入力することはできません。

元の問題:私はすでに、たとえば、ワードプレスのカスタムフィールドを与えてくれた人のリスト機能を取得する必要が

、自分のメールや自分の会社名は、オプションタグ内でそれらを表示しますフォーム内の選択ドロップダウン。

これまでのところは良いが、私はこのように2つの異なるループを実行する必要がありました(別の人から人への)2つの異なるフィールドを表示する必要があるため:ように

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

とを。

ループを最上部でのみ実行して両方のセクションにフィードしてみましたが、その方法では値を取得できませんでした(電子メールのすべてのメンバーではない):

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

それは正しいですか?ループを重複(DRY)しないようにする他の方法はありますか?

答えて

1

2つのループは必要ありません。最初のステップでは、あなたの投稿を1回ループし、カスタムフィールドを取得し、HTMLオプションとしてフォーマットされた配列を配列に格納します。 2番目のステップでは、配列を複数印刷します。

ここで私はいくつかのサンプルコードを提供します。

<?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

私はあなたのコードを使用しようとしましたが、それはうまくいきませんでした、とすぐに私はそれが1つの結果だけを印刷しますループを閉じるようなので、私は終了してみましたそれはコードの最後にありますが、まだ動作しません – Matto

+0

var_dump($ members)しようとします。 –

+0

コードをどこに置くべきですか? – Matto

関連する問題