• DONATE to NULLED!
    Вы можете помочь Форуму и команде, поддержать финансово.
    starwanderer - модератор этого раздела будет Вам благодарен!

Помощь Несколько loop без дупликатных записей.

Статус
В этой теме нельзя размещать новые ответы.

r0nin

Постоялец
Регистрация
12 Апр 2010
Сообщения
78
Реакции
4
Итак есть два кода(loop).
1) Этот выводит последние 5 записей с автора данного материала.

PHP:
<?php
echo my_get_display_author_posts(); ?>
 
<?php
function my_get_display_author_posts() {
    global $authordata, $post;
 
    $authors_posts = get_posts( array( 'author' => $authordata->ID, 'post__not_in' => array( $post->ID ) ) );
 
    $output = '<ul>';
    foreach ( $authors_posts as $authors_post ) {
        $output .= '<li><a href="' . get_permalink( $authors_post->ID ) . '">' . apply_filters( 'the_title', $authors_post->post_title, $authors_post->ID ) . '</a></li>';
    }
    $output .= '</ul>';
 
    return $output;
}
?>

2) Этот выводит последние 5 записей с категории данной записи.


PHP:
<?php
global $post;
$category = get_the_category($post->ID);
$category = $category[0]->cat_ID;
$myposts = get_posts(array('numberposts' => 5, 'offset' => 0, 'category__in' => array($category), 'post__not_in' => array($post->ID),'post_status'=>'publish'));
foreach($myposts as $post) :
setup_postdata($post);
?>
<li>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?></a>
</li>
<?php endforeach; ?>
<?php wp_reset_query(); ?>

Под словом данное подразумевается то что эти коды выполняются на страницах одиночной записи (одна запись - single.php).
Ну вот как сделать так чтобы одинаковые записи отсеивались. То есть один и тот же автор может иметь записи в одинаковых рубриках. В данном случае не надо их выводить.
 
Судя по всему, в функции get_posts() происходит выборка данных из базы. Так вот, я бы, при этом раскладе, передавал бы в неё ещё и список id, которые НЕ надо выбирать (подставлять в запрос условие NOT IN(22,434,545,11234) к примеру) или NULL - если исключать ничего не надо.

О, кстати, только заметил, что у вас там есть параметр post__not_in - вот туда и передавайте, во второй селект (последние 5 записей с категории данной записи), в виде массива, айдишки тех записей, которые нужно исключить (айдишки у нас были выбраны с помощью первого селекта)
 
Кароче как-то так:

PHP:
Первый селект:
 
<?php
echo my_get_display_author_posts(); ?>
$not_in_arr = array();
<?php
function my_get_display_author_posts() {
    global $authordata, $post, $not_in_arr;
    $not_in_arr[] = $post->ID;
    $authors_posts = get_posts( array( 'author' => $authordata->ID, 'post__not_in' => array( $post->ID ) ) );
 
    $output = '<ul>';
    foreach ( $authors_posts as $authors_post ) {
        $not_in_arr[] = $authors_post->ID;
        $output .= '<li><a href="' . get_permalink( $authors_post->ID ) . '">' . apply_filters( 'the_title', $authors_post->post_title, $authors_post->ID ) . '</a></li>';
    }
    $output .= '</ul>';
 
    return $output;
}
?>
 
 
Второй селект:
 
<?php
global $post, $not_in_arr;
$category = get_the_category($post->ID);
$category = $category[0]->cat_ID;
$myposts = get_posts(array('numberposts' => 5, 'offset' => 0, 'category__in' => array($category), 'post__not_in' =>  $not_in_arr,'post_status'=>'publish'));
foreach($myposts as $post) :
setup_postdata($post);
?>
<li>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?></a>
</li>
<?php endforeach; ?>
<?php wp_reset_query(); ?>

P.S. с WP никогда дела не имел, рассуждаю исключительно исходя из уровня своих знаний в php, поэтому за 100% работоспособность не ручаюсь. Но из вышеуказанного кода вы уже просто обязаны получить работоспособный вариант с минимумом усилий
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху