2013-09-25 9 views
0

Я пытаюсь преобразовать теги wordpress (и другой ввод) в классы html. Сначала я запрашиваю сообщения, устанавливаю их в цикле while, и в этом цикле while я конвертирую теги в полезные классы. Я получил это прямо сейчас:Цикл foreach в цикле while

<?php while ($query->have_posts()) : $query->the_post(); 


    $posttags = get_the_tags(); 
    if ($posttags) { 
     foreach($posttags as $tag) { 
     $thetags = $tag->name . ''; 
     echo $the_tags; 

     $thetags = strtolower($thetags); 


     $thetags = str_replace(' ','-',$thetags); 
     echo $thetags; 


     } 
    } 
    ?> 

    <!-- Loop posts -->   
    <li class="item <?php echo $thetags ?>" id="<?php the_ID(); ?>" data-permalink="<?php the_permalink(); ?>"> 

<?php endwhile; ?> 

Теперь в чем проблема:

Первое эхо, эхо теги, как: Tag 1 Tag 2. Второе эхо его, как тег-1tag-2 , чего я не хочу, потому что между каждым тегом нет пробелов. Таким образом, это только последний тег, показанный в классе html, потому что он не находится в цикле foreach.

Что я хочу: Я хочу иметь все связанные теги в классе html. Таким образом, конечный результат должен быть как:

<li class="item tag-1 tag-2 tag-4" id="32" data-permalink="thelink"> 

Однако если бы я поставил элемент списка в цикле Еогеаспа, я хотел бы получить <li> детали для каждого тега. Как это сделать правильно? Благодаря!

+0

У вас есть несколько тегов, поэтому использовать массив для хранения нескольких тегов –

ответ

1

я бы сделать что-то вроде этого (использовать массив вместо того, что и затем использовать взрываются, чтобы получить его с промежутками между его :)

<?php while ($query->have_posts()) : $query->the_post(); 

$tags = array(); // a array for the tags :) 
$posttags = get_the_tags(); 
if (!empty($posttags)) { 
    foreach($posttags as $tag) { 
    $thetags = $tag->name . ''; 
    echo $the_tags; 

    $thetags = strtolower($thetags); 


    $thetags = str_replace(' ','-',$thetags); 
    $tags[] = $thetags; 

    echo $thetags; 


    } 
} 
?> 

<!-- Loop posts -->  
<li class="item <?= implode(" ", $tags) ?>" id="<?php the_ID(); ?>" data-permalink="<?php the_permalink(); ?>"> 
+0

Спасибо, отлично работает – Trekdrop

+0

вы можете, как показано h2ooooooo, удалить некоторые из эхо и поместить некоторые вещи на одну строку (вам даже не нужно это ($ thetags = $ tag-> name. '';), Так как вы можете просто сделайте это $ thetags = $ tag-> name; –

1

Используйте массив вместо этого, а затем implode. Сделайте себе одолжение и использовать скобки в вашем предложении while вместо (если вы предпочитаете для удобства чтения - Я знаю, что делать в этом случае):

<?php 
    while ($query->have_posts()) { 
     $query->the_post(); 

     $posttags = get_the_tags(); 

     $tags = array(); //initiate it 
     if ($posttags) { 
      foreach($posttags as $tag) { 
       $tags[] = str_replace(' ','-', strtolower($tag->name)); //Push it to the array 
      } 
     } 
     ?> 
      <li class="item<?php echo (!empty($tags) ? ' ' . implode(' ', $tags) : '') ?>" id="<?php the_ID(); ?>" data-permalink="<?php the_permalink(); ?>"> 
     <?php 
    } 
?> 
+0

Спасибо, я дам ему попробовать. И спасибо за подсказку. – Trekdrop

Смежные вопросы