Разбиение страницы не работает с настраиваемой петлей

У меня есть настраиваемый цикл, который я использую для отображения некоторых списков недвижимости, которые будут доступны в течение 60 дней. Я вызываю его со следующей функцией:

  & л;? PHP
$ sixtydays = date ('Y /m /d', strtotime ('+ 60 дней'));
$ paged = (get_query_var ('paged'))? get_query_var ('paged'): 1;
$ query = new PostsOrderedByMetaQuery (массив (
  'post_type' => array ('post', 'real-estate'),
  'meta_key' => «Доступное время»,
  'meta_compare' => '& Л; =',
  'meta_value' => $ sixtydays,
  'paged' => $ Выгружаемого,
  'orderby_meta_key' => 'Цена',
  'orderby_order' => 'ASC'
));
? & GT;
& lt;? php while ($ query-> have_posts ()): $ query-> the_post (); ? & GT;
 

Пока цикл работает отлично, я не могу заставить его разбиваться на страницы. Он показывает первые 10 (мои по умолчанию) сообщения, но не показывает разбиение на страницы. Единственный способ показать все сообщения - показать их на одной странице, добавив 'posts_per_page' => -1, У меня есть аналогичные циклы на других страницах, у которых нет проблем с разбивкой по страницам. Единственное отличие этого заключается в том, что есть два мета-ключа, которые фильтруют сообщения.

Я использую WP Page Navi для этого и остальных моих страниц. Я закрываю цикл и добавляю разбивку на страницы, используя следующий код:

  & lt;? php endwhile; //Завершите цикл. Уф. ? & GT;
<php wp_pagenavi (); ? & GT;
& lt;? php wp_reset_query (); ? & GT;
 

Как я могу это исправить?

37 голосов | спросил nurain 30 22010vEurope/Moscow11bEurope/MoscowTue, 30 Nov 2010 21:44:43 +0300 2010, 21:44:43

5 ответов


33

Я столкнулся с этой проблемой с PageNavi раньше. Мое решение - временно захватить переменную $ wp_query, а затем переназначить ее после закрытия цикла. Exmaple:

  & lt;? php $ paged = (get_query_var ('paged'))? get_query_var ('paged'): 1;
$ Арг = массив (
   'Post_type' = & GT; 'Post',
   'cat' => 6,
   'posts_per_page' => 5,
   'Выгружаемого' = & GT; $ выгружаемых
);
$ temp = $ wp_query;
$ wp_query = null;
$ wp_query = новый WP_Query ($ args);

/* PageNavi at Top * /
if (function_exists ('wp_pagenavi')) {wp_pagenavi ();}
if ($ wp_query-> have_posts ()): while ($ wp_query-> have_posts ()): $ wp_query-> the_post ();

/* DO STUFF IN THE LOOP * /

ENDWHILE; ENDIF;
/* PageNavi at Bottom * /
if (function_exists ('wp_pagenavi')) {wp_pagenavi ();}
$ wp_query = null;
$ wp_query = $ temp;
wp_reset_query (); ? & GT;
 

Последний шаг состоит в том, чтобы переназначить переменную $ wp_query на то, что было изначально, а затем сбросить запрос для начала.

* Изменить: * Исправлен тэг php. Хороший глазный снайпер.

ответил PNMG 30 22010vEurope/Moscow11bEurope/MoscowTue, 30 Nov 2010 23:30:55 +0300 2010, 23:30:55
10

Сегодня у меня была аналогичная проблема ...

У вас есть пользовательский тип сообщения и страница или сообщение с тем же самым слипом? Значение - это URL страницы, на которой у вас есть /недвижимость, и пользовательский тип URL-адреса переписываются в /недвижимость?

Если это так, вы не можете иметь 2 с тем же URL-адресом, иначе Wordpress запутается.

Вы либо можете изменить URL-адрес, либо попробовать этот http://wordpress.org/support/topic/pagination-with-custom-post-type-listing?replies=23#post-1637753 . Я решил изменить свой URL-адрес, но кто-то там написал пользовательский запрос, чтобы обойти проблему.

ответил eileencodes 30 22010vEurope/Moscow11bEurope/MoscowTue, 30 Nov 2010 22:56:03 +0300 2010, 22:56:03
6

Я использую это для пользовательской разбивки на страницы и его работу отлично

  //разбиение на страницы для информационного бюллетеня

     //определить в файле функции
      function custom_pagination ($ numpages = '', $ pagerange = '', $ paged = '') {

      if (empty ($ pagerange)) {
        $ pagerange = 2;
      }

      /**
       * Эта первая часть нашей функции - откат
       * для пользовательской разбивки на страницы внутри регулярного цикла, который
       * использует глобальные $ paged и глобальные переменные $ wp_query.
       *
       * Это хорошо, потому что теперь мы можем переопределить разбивку по умолчанию
       * в нашей теме и использовать эту функцию в запросах по умолчанию
       * и пользовательские запросы.
       * /

      if ($ paged == '') {
          глобальные $ paged;
          if (пустой ($ paged)) {
            $ paged = 1;
          }
      }
      if ($ numpages == '') {
        глобальный $ wp_query;
        $ numpages = $ wp_query-> max_num_pages;
        if (! $ numpages) {
            $ numpages = 1;
        }
      }

      /**
       * Мы строим аргументы разбивки на страницы, чтобы войти в наши paginate_links
       * функция.
       * /

      $ pagination_args = массив (
        'base' => get_pagenum_link (1). '% _%',
        'format' => 'Страница /% #%',
        'total' => $ NUMPAGES,
        'current' => $ Выгружаемого,
        'show_all' => ложный,
        'end_size' => 1,
        'mid_size' => $ Pagerange,
        'prev_next' => правда,
        'prev_text' => __ ( '& амп; # 9668;'),
        'next_text' => __ ( '& амп; # 9658;'),
        'type' => «Просто»,
        'add_args' => правда,
        'add_fragment' => '',
        'after_page_number' => '',
        'before_page_number' => '',
        );
     $ paginate_links = paginate_links ($ pagination_args);

      if ($ paginate_links) {
        echo "<nav class = 'custom-pagination'>";
          //echo "<span class = 'page-numbers page-num'> Страница". $ paged. "из". $ numpages. "</span>";
          echo $ paginate_links;
        echo "</nav>";
      }
    }
    ? & GT;
 

//Определите это для любого шаблона, такого как шаблон-бюллетень

  & lt;? php $ paged = (get_query_var ('paged'))? get_query_var ('paged'): 1;
                               $ newslatter_detail = array (
                               'post_type' => 'Новостная рассылка',
                               'post_status' => 'публиковать',
                               'posts_per_page' => 4,
                               'order' => 'ASC',
                               //'orderby' => 'date',
                               'paged' => $ выгружаемого
                               );
                               $ posts = new WP_Query ($ newslatter_detail);
                               $ posts_array = get_posts ($ newslatter_detail);
                              if ($ posts -> have_posts ()) {
                               while ($ posts-> have_posts ()): $ posts-> the_post ();
                               the_title ();
                               ENDWHILE;
                        wp_reset_postdata ();
              } else {?>
                 Список форумов не найден.
                & lt;? php}?>

              <div class = "pagination">
                    & Lt;? PHP
                       if (function_exists (custom_pagination)) {
                        custom_pagination ($ posts- & GT; max_num_pages "", $ выгружаемого);
                       }
                       ? & GT;
                 & Lt; /дел & GT;
 
ответил Adnan Limdiwala 2 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 02 Sep 2016 07:51:24 +0300 2016, 07:51:24
2

Это решение, которое сработало для меня, используя часть исходного кода nurain и ответ Jan Fabry:

  & л;? PHP
$ paged = (get_query_var ('paged'))? get_query_var ('paged'): 1;
$ myquery = новый WP_Query (
    массив (
        'posts_per_page' => '2',
        'Выгружаемого' = & GT; $ выгружаемых
        //добавляем любые другие параметры в ваш массив wp_query
    )
);
? & GT;

& Lt;? PHP
if ($ myquery-> have_posts ()): while ($ myquery-> have_posts ()): $ myquery-> the_post ();
? & GT;

& lt;! - Начните свой пост. Ниже пример: ->

<div class = "article-box">
<h2 class = "article-title"> <a href = "<php the_permalink ();>> <& phis; the_title (); ? & GT; & Lt; /а & GT; & Lt; /h2 & GT;
<p class = "article-excerpt"> & lt;? php echo (get_the_excerpt ()); ? & GT; & Lt; /р & GT;
& Lt; /дел & GT;

& lt;! - Конец вашего сообщения ->

& lt;? php endwhile; ? & GT;
& lt;? php wp_pagenavi (массив ('query' => $ myquery));> & lt;! - ВАЖНО: не забудьте включить массив с вашими ранее объявленными значениями запроса здесь ->
& lt;? php wp_reset_query (); ? & GT;
<php else:>
<p> Нет сообщений, найденных </p>
& lt;? php endif; ? & GT;
 
ответил ChowKaiDeng 28 J0000006Europe/Moscow 2013, 04:27:11
1

Вы можете отобразить свой пользовательский тип сообщения, используя этот метод, который может работать с разбивкой по страницам.

  & л;? PHP
  query_posts (array ('post_type' => 'post', 'posts_per_page' => '2', 'paged' => get_query_var ('paged')));

  if (has_posts ()): while (has_posts ()): the_post ();
? & GT;
& lt;! - Начните свой пост. Ниже пример: ->
<div class = "article-box">
<h2 class = "article-title"> <a href = "<php the_permalink ();>> <& phis; the_title (); ? & GT; & Lt; /а & GT; & Lt; /h2 & GT;
<p class = "article-excerpt"> & lt;? php echo (get_the_excerpt ()); ? & GT; & Lt; /р & GT;
& Lt; /дел & GT;
& lt;! - Конец вашего сообщения ->
& lt;? php endwhile; ? & GT;
<php wp_pagenavi ();> & lt;! - ВАЖНО: не забудьте включить массив с вашими ранее объявленными значениями запроса здесь ->
& lt;? php wp_reset_query (); ? & GT;
<php else:>
<p> Нет сообщений, найденных </p>
& lt;? php endif; ? & GT;
 
ответил Shiv Singh 17 WedEurope/Moscow2014-12-17T13:35:22+03:00Europe/Moscow12bEurope/MoscowWed, 17 Dec 2014 13:35:22 +0300 2014, 13:35:22

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132