好吧,我无法想出这一个......
我将这个Wordpress用作照片库博客。
我有一个基本的设置,使用帖子的主要默认循环。
像这样:
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
//the post
<?php endwhile; ?>
<b>Not Found</b>
<?php endif; ?>
在侧边栏中,我希望出现随机帖子。
我设法做到了。有了这个:
<?php query_posts($query_string . 'showposts=1&orderby=rand'); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
//the post
<?php endwhile; endif; ?>
看起来很神奇!从理论上讲。
整个地方都有重复的帖子。这看起来很愚蠢。
我读了很多文章,但我似乎无法让它发挥作用:(
非常感谢任何帮助。
答案 0 :(得分:1)
Try this code for random post.
<ul>
<?php
$args = array( 'numberposts' => 5, 'orderby' => 'rand' );
$rand_posts = get_posts( $args );
foreach( $rand_posts as $post ) : ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
</ul>
Or You can get help from this url mention below
http://codex.wordpress.org/Template_Tags/get_posts
答案 1 :(得分:1)
经过一夜好眠,这就是我所做的:
使用帖子ID创建数组:
<?php $already_posted = array(); ?>
主循环在最后我将帖子ID记录到数组:
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
//the post
<?php $already_posted[]= $post->ID; endwhile; ?>
<?php else : ?>
<b>Not Found</b>
<?php endif; ?>
使用post__not_in的随机邮政编码可以避免重复,并再次记录帖子ID:
<?php $args = array( 'numberposts' => 1, 'orderby' => 'rand', 'post__not_in' => $already_posted );
$rand_posts = get_posts( $args );
foreach( $rand_posts as $post ) : ?>
//the post
<?php $already_posted[]= $post->ID; endforeach; ?>
超时工作!
你可以用这个做出惊人的事情:)
感谢paislee和Arvind Pal的帮助。
答案 2 :(得分:0)
通过记住第一个循环中显示的ID来跳过将要重复的内容
$displayed = array(); // create an array that we'll use associatively
在你的第一个循环中,每次:
$displayed[get_the_ID()] = TRUE; // <-- save all post IDs in here
改变你的随机循环开口:
<?php if (have_posts()) : while (have_posts()) : the_post();
// skip post IDs you've already seen
if ($displayed[get_the_ID()]) continue;
?>
由于重复次数的随机性,您可能希望更改查询以使其获得所有帖子,并在需要的随机数后将第二个循环更改为break
已到达帖子。
备注强>
showposts
被贬低了。将showposts=1
替换为posts_per_page=-1