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

Помощь Проблема с выводом пагинации

kastembay

Постоялец
Регистрация
3 Янв 2013
Сообщения
208
Реакции
124
Доброе время суток всем. Есть такой цикл :

Код:
<?php
                                $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;


                                $id=6; // ID заданной рубрики
                                $n=0;   // количество выводимых записей
                                $recent = new WP_Query("cat=$id&showposts=$n&paged=$paged");
                                while($recent->have_posts()) : $recent->the_post();

                                ?>
                                <div class="mix <?php foreach(get_the_category() as $category) { echo $category->slug . ' ';} ?>">
                                    <div class="col-md-3 col-sm-4 col-xs-12">
                                        <div class="image">
                                            <a href="<?php the_permalink() ?>"><?php if ( has_post_thumbnail() ) { the_post_thumbnail(); } ?></a>
                                        </div>
                                    </div>
                                    <div class="col-md-9 col-sm-8 col-xs-10">
                                        <div class="text">
                                            <h4><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h4>
                                            <?php the_excerpt(); ?>
                                        </div>
                                       
                                           
                                                <div class="col-md-6"><a href="<?php the_permalink() ?>">Читать далее</a></div>
                                                <div class="col-md-6">
                                                    <div class="meta">                                                       
                                                        <i class="fa fa-folder"></i> <?php foreach((get_the_category()) as $category) {
                                                            echo '<a href="'.get_category_link($category->cat_ID).'" title="'.$category->cat_name.'">'.$category->cat_name.'</a>; ';} ?> <br>
                                                            <time><i class="fa fa-calendar"></i> <?php the_time('F j, Y'); // Дата создания поста ?></time>
                                                            <span><i class="fa fa-comments"></i> <?php comments_popup_link( '0', '1', '%', 'comments-link', 'Обсуждение закрыто'); ?></span>
                                                        </div>

                                                </div>       
                                                                           
                                    </div> <!-- col-md-9 col-sm-8 col-xs-10 -->
                               
                                </div> <!-- mix -->
                               
                                <?php wp_reset_postdata();
                                endwhile;

                                ?>

но он ни разу не хочет мне вывести пагинацию. Цикл запускаю на странице page-primer.php. Может из-за этого? Пробовал даже вставлять левые коды в function.php, но ситуация не меняется. Что я упускаю? Плагины не предлагать! Цикл на других страницах работает, но там пагинация не нужна.

Заранее благодарю!
 
а в качестве шаблона вывода выбран этот шаблон у страницы?
есть такой Для просмотра ссылки Войди или Зарегистрируйся
т.е. изначально надо шаблон "предопределить" а после выбрать в качестве основного для данной страницы.

upd. поясню
в page-primer.php вначале должна быть строка
/* Template Name: Example Template */
а в окне редактирования выбрать его
basics-page-templates-03.png
 
а в качестве шаблона вывода выбран этот шаблон у страницы?
есть такой Для просмотра ссылки Войди или Зарегистрируйся
т.е. изначально надо шаблон "предопределить" а после выбрать в качестве основного для данной страницы.

upd. поясню
в page-primer.php вначале должна быть строка
/* Template Name: Example Template */
а в окне редактирования выбрать его
basics-page-templates-03.png
В данном случае я вывожу через page-{slug}.php, то есть использую слуг и страница автоматом цепляется.

Upd
Сейчас проверил стандартный цикл вордпресса
Код:
<?php if (have_posts()) : while (have_posts()) : the_post(); // Цикл записей ?>   

<?php endwhile; // Конец цикла. ?>
Работает на ура и выводит пагинацию. Цикл описанный выше нужен для того, что бы выводить посты из конкретной категории, но пагинация, зараза, там не работает. Вопрос: почему?
 
Последнее редактирование:
Вопрос: почему?

Он и не должен выводить пагинацию. В шаблоне twentysixteen, например, после цикла пагинация выводится в явном виде:

PHP:
the_posts_pagination( array(
    'prev_text'          => __( 'Previous page', 'twentysixteen' ),
    'next_text'          => __( 'Next page', 'twentysixteen' ),
    'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentysixteen' ) . ' </span>',
) );

Работает она с глобальным объектом WP_Query: Для просмотра ссылки Войди или Зарегистрируйся
 
Он и не должен выводить пагинацию. В шаблоне twentysixteen, например, после цикла пагинация выводится в явном виде:

PHP:
the_posts_pagination( array(
    'prev_text'          => __( 'Previous page', 'twentysixteen' ),
    'next_text'          => __( 'Next page', 'twentysixteen' ),
    'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentysixteen' ) . ' </span>',
) );

Работает она с глобальным объектом WP_Query: Для просмотра ссылки Войди или Зарегистрируйся


Да, это я уже понял, но при явном выводе этого кода
Код:
    <?php // Пагинация
                                        global $wp_query;
                                        $big = 999999999;
                                        echo paginate_links( array(
                                            'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
                                            'format' => '?paged=%#%',
                                            'current' => max( 1, get_query_var('paged') ),
                                            'type' => 'list',
                                            'prev_text'    => __('« Сюда'),
                                            'next_text'    => __('Туда »'),
                                            'total' => $wp_query->max_num_pages
                                        ) );
                                       
                                       
                                        ?>
или использовании the_posts_pagination() или get_the_posts_pagination() результат отрицательный. Нужно думать, походу придется весь цикл переделывать.

Сразу вопрос, если ли циклы вывода постов, с явным указания родительской категории и пагинацией?)
 
или использовании the_posts_pagination() или get_the_posts_pagination() результат отрицательный. Нужно думать, походу придется весь цикл переделывать.

Не обязательно. Я в свое время написал функцию для пагинации с поддержкой явного указания объекта запроса:


PHP:
function tw_navigation($args = array(), $query = false) {

    $defaults = array(
        'before'    => '<div class="pagination">',
        'after'        => '</div>',
        'prev'        => '&laquo;',
        'next'        => '&raquo;',
        'first'        => false,
        'last'        => false,
        'pages_text'=> '',
        'number'    => 10,
        'step'        => 10,
        'inactive'    => false,
        'dots_left' => '...',
        'dots_right'=> '...',
        'type'        => 'posts'
    );
  
    foreach ($defaults as $key => $value) {
        if (isset($args[$key])) $$key = $args[$key]; else $$key = $value;
    }
  
    if ($type == 'comments') {
        $paged = intval(get_query_var('cpage'));
        $max_page = intval(get_comment_pages_count());
    } elseif ($type == 'page') {
        global $page, $numpages;
        $paged = intval($page);
        $max_page = intval($numpages);
    } else {
        if (!$query or !($query instanceof WP_Query)) {
            global $wp_query;
            $query = $wp_query;
        }
        $paged = isset($query->query_vars['paged']) ? intval($query->query_vars['paged']) : 1;
        $max_page = isset($query->max_num_pages ) ? intval($wp_query->max_num_pages) : 1;
    }
  
    if ($max_page < 2) return '';
    if ($paged == 0) $paged = 1;
  
    $out = $before;
    $number = $number - 1;
    $half_page_start = floor($number/2);
    $half_page_end = ceil($number/2);
    $start_page = $paged - $half_page_start;
    $end_page = $paged + $half_page_end;

    if ($start_page <= 0) $start_page = 1;
  
    if (($end_page - $start_page) != $number) $end_page = $start_page + $number;
  
    if ($end_page > $max_page) {
        $start_page = $max_page - $number;
        $end_page = intval($max_page);
    }

    if ($start_page <= 0) $start_page = 1;

    if ($pages_text) {
        $pages_text = str_replace('{current}', $paged, $pages_text);
        $pages_text = str_replace('{last}', $max_page, $pages_text);
        $out .= '<span class="pages">' . $pages_text . '</span>';
    }
    if ($first and $start_page >= 2 and ($number + 1) < $max_page) {
        $out .= '<a class="prev double" href="' . tw_page_link(1, $type) . '">' . (($first != 'first') ? $first : 1) . '</a>';
        if ($dots_left and $start_page != 2) $out .= '<span class="extend">' . $dots_left . '</span>';
    }
  
    if ($paged != 1) {
        $out .= '<a class="prev" href="' . tw_page_link(($paged-1), $type) . '">' . $prev . '</a>';
    } elseif ($inactive) {
        $out .= '<span class="prev">' . $prev .'</span>';
    }
      
    for ($i = $start_page; $i <= $end_page; $i++) {
        if ($i == $paged) {
            $out .= '<span class="current">' . $i . '</span>';
        } else {
            $out .= '<a href="' . tw_page_link($i, $type) . '">' . $i . '</a>';
        }
    }
    if ($step and $end_page < $max_page){
        for ($i = $end_page + 1; $i <= $max_page; $i++) {
            if ($i % $step == 0 && $i !== $num_pages) {
                if (++$dd == 1) $out .= '<span class="extend">' . $dots_right . '</span>';
                $out .= '<a href="' . tw_page_link($i, $type) . '">' . $i . '</a>';
            }
        }
    }
    if ($paged != $end_page) {
        $out .= '<a class="next" href="' . tw_page_link(($paged+1), $type) . '">' . $next . '</a>';
    } elseif ($inactive) {
        $out .= '<span class="next">' . $next . '</span>';
    }
  
    if ($last and $end_page < $max_page) {
        if ($dots_right and $end_page != ($max_page-1)) $out.= '<span class="extend">' . $dots_right . '</span>';
        $out .= '<a class="next double" href="' . tw_page_link($max_page, $type) . '">' . (($last != 'last') ? $last : $max_page) . '</a>';
    }
  
    $out .= $after;
  
    return $out;
    
}

function tw_page_link($page, $type = false) {
  
    if ($type == 'comments') {
        $link = get_comments_pagenum_link($page);
    } elseif ($type == 'page') {
        $link = str_replace(array('<a href="', '">'), '', _wp_link_page($page));
        $link = apply_filters('wp_link_pages_link', $link, $page);
    } else {
        $link = get_pagenum_link($page);
    }
  
    return $link;
  
}
 
Решил так
Код:
function pagination($pages = '', $range = 4)
{
     $showitems = ($range * 2)+1;
     global $paged;
     if(empty($paged)) $paged = 1;
     if($pages == '')
     {
         global $wp_query;
         $pages = $wp_query->max_num_pages;
         if(!$pages)
         {
             $pages = 1;
         }
     }  
     if(1 != $pages)
     {
         echo "<div class=\"pangination\"><span>Страница ".$paged." из ".$pages."</span>";
         if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."'>&laquo; First</a>";
         if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>&lsaquo; Previous</a>";
         for ($i=1; $i <= $pages; $i++)
         {
             if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
             {
                 echo ($paged == $i)? "<span class=\"current\">".$i."</span>":"<a href='".get_pagenum_link($i)."' class=\"inactive\">".$i."</a>";
             }
         }
         if ($paged < $pages && $showitems < $pages) echo "<a href=\"".get_pagenum_link($paged + 1)."\">Next &rsaquo;</a>";
         if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($pages)."'>Last &raquo;</a>";
         echo "</div>\n";
     }
}

Код:
    <?php if (function_exists("pagination")) {
                                                pagination($custom_query->max_num_pages);
                                         } ?>


TwistedAndy - спасибо за функцию, но она у меня не пошла. Уже нет времени разбираться. Позже буду дербанить ее)

Спасибо всем за помощь.
 
Назад
Сверху