Поддержка Проблемы и решения Дублирование постов в ленте

  • Решено blackcky

    (@blackcky)


    Добрый день, сегодня при работе с циклами (пытался вывести в конкретном блоке на главной посты определенной рубрики) столкнулся с проблемой дублирования. У меня была цель вывести посты в блоке только одной рубрики, для этого я поочередно использовал query_posts(), WP_Query(), и get_posts().
    Редактировать код я стал в contant где был прописан стандартный код

    <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
       <?php while (have_posts()) { the_post(); ?>
        //...
       <?php } ?>
    </article><!-- #post-## -->

    После изучения мануалов на тему какой способ выбрать, пришел в выводу что get_posts() мне подходит, сделав вот такой код

    <?php
    global $post;
    $args = array('category' => 9);
    $myposts = get_posts( $args );
    foreach( $myposts as $post ){ setup_postdata($post);
    	//...
    }
    wp_reset_postdata();
    ?>

    которая помогла мне с моей задачей но выявила новую проблему с дублированием постов. Суть в том что на странице макс кол постов рубрики — 5 , остольные на других страницах, при клике(допустим на 2 страницу) у меня появляются теже самые посты что и на первой (последние посты) и так на каждой странице этой категории где в контенте я использовал get_posts().
    При использовании query_posts() — тоже самое, а WP_Query() — вообще какую то траблу выдает( весь контент становиться просто огромным и растянутым но не это важно).
    В общем друзья подскажите пожалуйста в чем дело, целый день сижу над этой проблемой, хотел сам дойти до решения, но уже нет сил и знаний в этой сфере, и интернет и помогает, спасибо!
    Сайт находится на локалке, так что ссылку дать не могу, могу прислать картинки дублирования постов (если кто не понял о чем я говорил). Будут вопросы спрашивайте, предоставлю любую информацию.

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Попробуйте так:

    <?php
    global $post;
    
    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
    
    $myposts = get_posts( array(
    	'category' => 9,
    	'paged'    => $paged,
    ) );
    
    foreach ( $myposts as $post ) {
    	setup_postdata( $post );
    	// ...
    }
    
    wp_reset_postdata();
    ?>

    <?php $arg = query_posts( array(‘category’ => 9));?>

    Я бы перед стандартным кодом поставил это (мы внедряем свои параметры в цикл вывода постов). Не знаю, правда, правильно ли использовать query_posts здесь или нет.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    query_posts() лучше вообще не использовать, тем более что проблему с навигацией это не решит 🙂

    Автор blackcky

    (@blackcky)

    Sergey Biryukov, Спасибо большое! Ваш способ помог. Правда появилась новая проблема с навигацией, она конечно не критична, но хотелось бы ее решить. Получается так что на странице навигация считает все мои посты. То есть: этот блок на главной с вашим кодом выводит определенную рубрику постов, в ней 5 постов, я сделал так чтобы на каждой странице выводился один пост, получается должно быть 5 страниц, но в другой рубрике есть еще два поста, которые тоже добавляются к навигации (хоть они и не отображаются) и мы получаем вместо 5 страниц — семь( две последние посты).

    <?php get_template_part('template-parts/content-news') ?>
    
      <div class="pagination_main">
         <div class="pagination">
    	<?php wp_corenavi(); ?>
         </div>
      </div>
    
    <?php } ?>

    это код с index , а код навигации в function

    // Панель навигации
    function wp_corenavi() {
    global $wp_query, $wp_rewrite;
    $pages = '';
    $max = $wp_query->max_num_pages;
    if (!$current = get_query_var('paged')) $current = 1;
    $a['base'] = str_replace(999999999, '%#%', get_pagenum_link(999999999));
    $a['total'] = $max;
    $a['current'] = $current;
    
    $total = 0; //1 - выводить текст "Страница N из N", 0 - не выводить
    $a['mid_size'] = 2; //сколько ссылок показывать слева и справа от текущей
    $a['end_size'] = 1; //сколько ссылок показывать в начале и в конце
    $a['prev_text'] = '<'; //текст ссылки "Предыдущая страница"
    $a['next_text'] = '>'; //текст ссылки "Следующая страница"
    
    if ($max > 1) echo '<nav class="navigation">';
    if ($total == 1 && $max > 1) $pages = '<span class="pages">Страница ' . $current . ' из ' . $max . '</span>'."\r\n";
    echo $pages . paginate_links($a);
    if ($max > 1) echo '</nav>';
    }

    Новую проблему попытаюсь решить сам, тема закрыта.

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «Дублирование постов в ленте» закрыта для новых ответов.