随机Wordpress在主循环之外发布,没有重复的帖子。怎么样?

时间:2012-02-16 21:25:33

标签: php wordpress loops random

好吧,我无法想出这一个......

我将这个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; ?>

看起来很神奇!从理论上讲。

整个地方都有重复的帖子。这看起来很愚蠢。

我读了很多文章,但我似乎无法让它发挥作用:(

非常感谢任何帮助。

3 个答案:

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