Пользовательский wp_query с рабочей пагинацией на шаблоне страницы - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь добавить пользовательский запрос в шаблон WordPress и включить нумерацию страниц, но моя нумерация страниц не появляется, например, ради этого я пытаюсь добавить это в page.php.

У меня естьследующая разметка, которая отлично работает, когда размещается внутри шаблона категории, например, category.php, отображается нумерация страниц и функционирует просто отлично.Проблема заключается в том, что разбиение на страницы не появляется, если тот же код размещен в page.php или любом другом шаблоне страницы.

Запрос:

              <?php
                $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
                $loop = new WP_Query(
                    array(
                        'post_type' => 'post',
                        'posts_per_page' => 10,     
                        'paged' => $paged,
                        'orderby' => 'desc',
                    )
                );
              ?>

              <?php if ($loop->have_posts()): while ($loop->have_posts()) : $loop->the_post(); ?>

                // Loop Markup goes here.

              <?php endwhile; ?> 
              <?php endif; ?>

              <?php wp_reset_query(); ?>

              <?php pagination(); ?>

Pagination (), как определено в functions.php:

              function pagination() {
                  global $wp_query;
                  $big = 999999999;
                  echo paginate_links(array(
                      'base' => str_replace($big, '%#%', get_pagenum_link($big)),
                      'format' => '?paged=%#%',
                      'current' => max(1, get_query_var('paged')),
                      'total' => $wp_query->max_num_pages
                  ));
              }
              add_action('init', 'pagination');

Я видел несколько постов с просьбой о помощи по той же теме, но я не нашел элегантного решения.

Любой совет будет высоко ценится!Мои знания PHP довольно ограничены, я взял функцию pagination () из темы HTML5 Blank от Todd Motto, поэтому я не на 100% понимаю, что определяет эта функция.

1 Ответ

0 голосов
/ 06 декабря 2018

Мне удалось найти решение, объединив мой код из исходного поста со следующим кодом из этого урока :

Я публикую полный пример простого page.php длялюбой, кто потерял и нуждается в большем количестве контекста, чтобы реализовать это, прекрасно работает для меня, без лишних аспектов, таких как каждый номер страницы, возвращающий одни и те же сообщения или что-то в этом роде.

<?php get_header(); ?>

    <?php if (have_posts()): while (have_posts()) : the_post(); ?>

            <div class="the_loop">

              <?php        
                if ( get_query_var('paged') ) {
                    $paged = get_query_var('paged');
                } elseif ( get_query_var('page') ) { // 'page' is used instead of 'paged' on Static Front Page
                    $paged = get_query_var('page');
                } else {
                    $paged = 1;
                }
                $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
                $loop = new WP_Query(
                    array(
                        'post_type' => 'post',
                        'posts_per_page' => get_option('posts_per_page'),     
                        'paged' => $paged,
                        'post_status' => 'publish',
                        'orderby' => 'desc',
                        'orderby' => 'date' // modified | title | name | ID | rand
                    )
                );
              ?>

              <?php if ($loop->have_posts()): while ($loop->have_posts()) : $loop->the_post(); ?>

                // Loop code goes here.

              <?php endwhile; ?>

              <?php if ($loop->max_num_pages > 1) : // custom pagination  ?>
                <?php
                  $orig_query = $wp_query; // fix for pagination to work
                  $wp_query = $loop;
                  $big = 999999999;
                  echo paginate_links(array(
                      'base' => str_replace($big, '%#%', get_pagenum_link($big)),
                      'format' => '?paged=%#%',
                      'current' => max(1, get_query_var('paged')),
                      'total' => $wp_query->max_num_pages
                  ));                  
                  $wp_query = $orig_query; // fix for pagination to work
                ?>
              <?php endif; ?>

              <?php wp_reset_postdata(); else: echo '<p>'.__('Sorry, no posts matched your criteria.').'</p>'; endif; ?>  

            </div>

    <?php endwhile; ?>
    <?php endif; ?>    

<?php get_template_part('footer'); ?>
...