Случайные посты Wordpress за пределами основного цикла без дублирующих постов. Как? - PullRequest
0 голосов
/ 17 февраля 2012

Ну, я не могу понять это ...

У меня есть этот 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 ]

1 голос
/ 17 февраля 2012
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 голос
/ 17 февраля 2012

После хорошего ночного сна вот что я сделал:

Создание массива с идентификатором записи:

<?php $already_posted = array(); ?>

Основной цикл, где в конце я записываю идентификатор записи вмассив:

<?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, чтобы избежать дублирования и повторной записи идентификатора записи:

<?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; ?>

Работает всегда!

С этим можно делать удивительные вещи:)

Спасибо Пейсли и Арвинду Палу за помощь.

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

Пропустить возможные дубликаты, запомнив отображаемые идентификаторы из первого цикла

$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
...