Поддержка Проблемы и решения Проверка в файле category.php, вывести определенное количес

  • Решено alegar

    (@alegar)


    Вот таким образом вывожу первые 3 поста категории
    <?php
    $paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;
    $args = array(‘category_name’ => ‘stories-of-successful’, ‘posts_per_page’ => 3, ‘paged’ => $paged );
    $the_query = new WP_Query( $args ); ?>

    <?php if ( $the_query->have_posts() ) : ?>
    <?php
    // the loop
    while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    Если имя категории не указывать, то всегда выводится 3 поста, и не проверяет, может в категории всего один пост. Можно сделать кучу циклов под конкретную категорию, но по моему это бред…
    как мне получить id категории(кликнутой), записать ее в переменную и передать ее в массив array ?

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

    (@denisco)

    WordPress-разработчик, denisco.pro

    Так уже пробовали?

    $cat = get_query_var('cat');
    $args = array('cat' => $cat, 'posts_per_page' => 3, 'paged' => $paged );

    Но если Вы хотите изменить основной цикл, то лучше это делать через хук pre_get_posts.
    Как-нибудь так:

    function dco_pre_get_posts($query) {
      if ( !is_admin() && $query->is_main_query() ) {
        if ($query->is_category()) {
            $query->set('posts_per_page', '3');
        }
      }
    }
    
    add_action('pre_get_posts','dco_pre_get_posts');

    Автор alegar

    (@alegar)

    Нужно чтобы пагинация была, эта функция выведет только 3 поста, а если их 50 ?

    Автор alegar

    (@alegar)

    Сделал через
    $cat = get_query_var(‘cat’);
    $args = array(‘cat’ => $cat, ‘posts_per_page’ => 3, ‘paged’ => $paged );
    но почему то при переходе на вторую страницу пагинации 404 выдает.

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Нужно чтобы пагинация была, эта функция выведет только 3 поста, а если их 50 ?

    Не очень понял вопрос, добавьте пагинацию и будет пагинация:

    <?php if (have_posts()) : ?>
    	<?php while (have_posts()) : the_post(); ?>
                <?php the_title(); ?>
    	<?php endwhile; ?>
    	<?php the_posts_pagination(); ?>
    <?php endif; ?>

     

    но почему то при переходе на вторую страницу пагинации 404 выдает.

    Это происходит потому что Вы нарушаете основной цикл, делая дополнительный запрос. Но если хотите, зайдите в Настройки чтения и поставьте опции «На страницах блога отображать не более» значение 1, должно начать работать.

    Автор alegar

    (@alegar)

    denisco, Огромное спасибо за

    Это происходит потому что Вы нарушаете основной цикл, делая дополнительный запрос. Но если хотите, зайдите в Настройки чтения и поставьте опции «На страницах блога отображать не более» значение 1, должно начать работать.

    Уже англо язычные форумы перечитал, про пагинацию в category.php, все оказалось проще)))
    Пагинацию я вывожу так:
    <?php
    $big = 999999999; // need an unlikely integer

    echo paginate_links( array(‘base’ => str_replace( $big, ‘%#%’, esc_url( get_pagenum_link( $big ) ) ),
    ‘format’ => ‘?paged=%#%’,
    ‘current’ => max( 1, get_query_var(‘paged’) ),
    ‘total’ => $the_query->max_num_pages,
    ‘prev_text’ => »,
    ‘next_text’ => ») );
    ?>

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «Проверка в файле category.php, вывести определенное количес» закрыта для новых ответов.