serii81
@serii81
Я люблю phр...

Как вывести определенное количество постов для произвольный типов записей?

Добрый день.
Я на сайте в настройках назначил вывод только 2 постов на странице.
Создал категории, посты, пагинацию, и все нормально работает.

Теперь создал произвольный тип записей portfolio. И на странице нужно вывести по 10 штук. Но у меня выводится по 2, так как в настройках указал.

Теперь в файле archive-portfolio.php я прописал цикл wp_query и указал вывести 10 записей. У меня всего их 10 шт.

Но почему-то появляется и пагинация, буд-то записи выводится по два.

Где-то я нахимичил, но не могу разобраться.
<?php
get_header();
?>
    <?php get_template_part('template-parts/services'); ?>
    
    <div class="main-content">
        <div class="container">
            <header class="page-header">
                <h1 class="header-title"><?php echo __('Portfolio', 'bs_sonaris'); ?></h1>
            </header><!-- .page-header -->

            <div class="section section-portfolio">
                <div class="portfolio">
                    <?php
                        $portfolio = new WP_Query([
                            'post_type' => 'portfolio',
                            'posts_per_page' => 10
                        ]);
                    ?>

                    <?php if($portfolio->have_posts()): ?>
                        <?php while($portfolio->have_posts()): ?>
                            <?php $portfolio->the_post(); ?>
                            <?php
                                $thumb_url = kama_thumb_src('w=300 &h=300');
                            ?>
                            <a class="portfolio-item waves-effect" href="<?php the_permalink(); ?>">
                                <img class="portfolio-item-img" src="<?php echo $thumb_url; ?>" alt=""/>
                                <span class="btn btn-white btn-rounded"><?php echo __('More', 'bs_sonaris') ?></span>
                            </a>
                        <?php endwhile; ?>
                        <div class="portfolio-pagination">
                            <?php the_posts_pagination([
                                'show_all'     => true, // показаны все страницы участвующие в пагинации
                                'end_size'     => 1,     // количество страниц на концах
                                'mid_size'     => 1,     // количество страниц вокруг текущей
                                'prev_next'    => false,  // выводить ли боковые ссылки "предыдущая/следующая страница".
                                'prev_text'    => __('« Previous'),
                                'next_text'    => __('Next »'),
                                'add_args'     => false, // Массив аргументов (переменных запроса), которые нужно добавить к ссылкам.
                                'add_fragment' => '',     // Текст который добавиться ко всем ссылкам.
                                'screen_reader_text' => __( '' ),
                            ]); ?>
                        </div>
                <?php endif; ?>
        </div>
    </div>

<?php
get_footer();


Заранее благодарен.
  • Вопрос задан
  • 1363 просмотра
Решения вопроса 2
lamer350
@lamer350
กำลังสูงสุด
Добавьте в конце wp_reset_postdata(); после endif;
UPD: а лучше после endwhile;
Ответ написан
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Теперь в файле archive-portfolio.php я прописал цикл wp_query и указал вывести 10 записей. У меня всего их 10 шт.

Не нужно так, это facepalm. У вас уже есть основной запрос, который возвращает 2 записи, а вы поверх колбасите новый запрос, чтобы вернуть 10. Выполняются оба. Для модификации основного запроса есть хук pre_get_posts:

function modify_main_query( $query ) 
{
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }

    if ( is_post_type_archive( 'portfolio' ) ) {
        // Display 10 posts for a custom post type called 'portfolio'
        $query->set( 'posts_per_page', 10 );
        return;
    }
}
add_action( 'pre_get_posts', 'modify_main_query' );
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы