Цикл по массиву и возвращаемым значениям и HTML - PullRequest
1 голос
/ 19 февраля 2012

Я храню почтовые идентификаторы в массиве.Я хотел бы перебрать массив и отобразить идентификаторы в пределах <div>, содержащих теги <p> и <ul>, но только когда хотя бы один идентификатор находится в массиве.Если массив пуст, html не может быть возвращен.Это подразумевает, что я должен использовать какой-то оператор if перед циклом.Излишне говорить, что мои php-навыки довольно просты, и после двух дней напряженных попыток я ничего не получаю.Благодарен за помощь!

Мой код (с помощью Wordpress)

$postids = array();

...

$postids [] = $post->ID; //stores the post IDs in the array

Вот обновление.Я извиняюсь за публикацию всего этого кода, поскольку он довольно запутан со многими происходящими вещами.Это второй цикл из трех (или более).Идентификаторы, отображаемые в почти идентичном первом цикле, были переданы.Отображаются только те идентификаторы, которые не были получены предыдущим циклом, чтобы не показывать дубликаты сообщений.

Я попытался удалить всю разметку HTML и запросить $ postids с новым WP_Query после этого, но при этом будут получены все сообщения, которые я когда-либо создал.Я уверен, что это правильный путь, хотя я, очевидно, что-то делаю не так.

<?php
$tags = wp_get_post_tags($post->ID);
if ($tags) {
  $first_tag = $tags[1]->term_id;
  $args=array(
    'tag__in' => array($first_tag),
    'post__not_in' => array($post->ID),
    'showposts'=>5, //Display this number of related posts
    'ignore_sticky_posts'=>1
   );
  $postids = array();
  $my_query = new WP_Query($args);
  if( $my_query->have_posts() ) {
      echo '<ul id="relatedposts">'; 
      while ($my_query->have_posts()) : $my_query->the_post(); if (!in_array($post->ID, $ids)) {; $postids [] = $post->ID; ?>
      <li><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
      <?php }
    $ids[]= $post->ID; 
    endwhile;
  }
}
?>
      </ul>
<?php if ($postids){ //$postids has at least one value set
    echo '<div>Related posts</div>'; //Outputting the header text. This works! If there are no IDs in the array nothing is shown.
     }; 
?>

Ответы [ 4 ]

3 голосов
/ 19 февраля 2012

Это должно работать:

 <?php

 // assuming you have an array of ids called $postids

 if(count($postids)){
    echo "<div><ul>";
    foreach($postids as $id){
       echo "<li>$id</li>";
    }
    echo "</ul></div>";
 }


 ?>

Чтобы разбить его:

if(count($ids)){

count() возвращает количество элементов в массиве $ids.Любое число, отличное от нуля, будет оценено как true и введет оператор if, ноль будет оценено как false, и все это будет пропущено.

 foreach($ids as $id){

Это перебирает каждый элемент массива $ids и присваивает его переменной $id.Надеемся, что echo заявления говорят сами за себя.

1 голос
/ 19 февраля 2012

Есть несколько способов сделать это.

if ($postids){ //$postids is TRUE (ie $postids is not an empty array)
     //do your output
}

ИЛИ

if(count($postids) > 0){ //$postids has at least one value set
    //do your output
}

Привыкнуть к простым проверкам истинности и! False - ваш друг

0 голосов
/ 20 февраля 2012

Благодаря огромной помощи Гордона у меня теперь есть рабочее решение.Весь HTML удаляется из грязного оригинального кода выше.Следующий оператор if и цикл foreach выводят html простым и удобным способом.Стилизовать теги и теперь очень просто.

<?php
  if(count($postids)){
    echo "<div>Related posts<ul>";
    foreach($postids as $id){
       echo '<li><a href="'.get_permalink( $id ).'">'.get_the_title( $id ).'</a></li>';
    }
    echo "</ul></div>";
  }
?>   
0 голосов
/ 19 февраля 2012

Может что-нибудь подобное?Вам следует настроить этот код для получения содержимого сообщений или всего, что вы хотели бы сделать.

<?php
$postIds = array(1, 2, 3, 4, 5);
?>
<html>
<head>
    <title>Post IDs!</title>
</head>
<body>
    <h1>Post IDs!</h1>
<?php if(empty($postIds)): ?>
    <p>There are no post IDs :(</p>
<?php else: ?>
    <ul>
<?php foreach($postIds as $postId): ?>
        <li><?php echo $postId; ?></li>
<?php endforeach; ?>
    </ul>
<?php endif; ?>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...