我将帖子ID存储在一个数组中。我想遍历数组并在包含<div>
和<p>
标记的<ul>
中显示ID,但仅当数组中至少有一个ID时才显示。如果数组为空,则不能返回html。这意味着我应该在循环之前使用某种if语句。毋庸置疑,我的PHP技能非常基础,经过两天的努力,我无处可去。感谢帮助!
我的代码(使用Wordpress)
$postids = array();
...
$postids [] = $post->ID; //stores the post IDs in the array
这是一个更新。我为发布所有这些代码而道歉,因为很多事情正在发生。这是三个(或更多)的第二个循环。已经传递了在几乎相同的第一个循环中显示的ID。仅显示前一循环未检索到的那些ID,以便不显示任何重复的帖子。
我尝试删除所有HTML标记,然后使用新的WP_Query查询$ postids但是检索了我创建的所有帖子。我很确定这是继续的正确方法,尽管我显然做错了。
<?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.
};
?>
答案 0 :(得分:3)
这应该有效:
<?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 :(得分:1)
有几种方法可以做到。
if ($postids){ //$postids is TRUE (ie $postids is not an empty array)
//do your output
}
OR
if(count($postids) > 0){ //$postids has at least one value set
//do your output
}
习惯于简单测试true和!false是你的朋友
答案 2 :(得分:0)
也许是这样的?您应该自定义此代码以检索帖子的内容,或者您想要做的任何事情。
<?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>
答案 3 :(得分:0)
感谢戈登的大力帮助,我现在有了一个有效的解决方案。从上面凌乱的原始代码中删除所有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>";
}
?>