맞춤 루프에서 페이지 매김이 작동하지 않음


41

60 일 이내에 사용 가능한 부동산 목록을 표시하는 데 사용하는 사용자 정의 루프가 있습니다. 다음 함수를 사용하여 호출합니다.

<?php 
$sixtydays = date('Y/m/d', strtotime('+60 days'));
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$query = new PostsOrderedByMetaQuery(array(
  'post_type' => array('post', 'real-estate'),
  'meta_key' => 'Time Available',
  'meta_compare' => '<=',
  'meta_value' => $sixtydays,
  'paged' => $paged,
  'orderby_meta_key' => 'Price',
  'orderby_order'    => 'ASC'
));
?>
<?php while ($query->have_posts()) : $query->the_post(); ?>

루프가 훌륭하게 작동하지만 페이지 매김을 할 수 없습니다. 처음 10 개의 게시물을 표시하지만 페이지 매김을 표시하지 않습니다. 모든 게시물을 표시하는 유일한 방법은 'posts_per_page' => -1,페이지 매김에 문제가없는 다른 페이지에 비슷한 루프가 있음 을 추가하여 한 페이지에 게시하는 것입니다 . 이것과의 유일한 차이점 은 게시물을 필터링하는 두 개의 메타 키가 있다는 것입니다.

이 페이지와 나머지 페이지에는 WP Page Navi를 사용하고 있습니다. 루프를 닫고 다음 코드를 사용하여 페이지 매김을 추가하고 있습니다.

<?php endwhile; // End the loop. Whew. ?>
<?php wp_pagenavi(); ?>
<?php wp_reset_query(); ?>

이 문제를 해결하려면 어떻게해야합니까?


대답 한 후 질문을 다시 읽었습니다 ... pagenavi 플러그인이 표시되지 않거나 페이지 매김으로 인해 404에 도달 했습니까?
eileencodes

WP Page Navi가 유사한 쿼리를 가진 게시물에 표시되지 않습니다 (하나 이상의 메타 키로 필터링 됨). 그것은 아카이브, 블로그 등과 같은 다른 모든 페이지에 나타납니다.
nurain

답변:


38

이전에 PageNavi에서이 문제가 발생했습니다. 내 해결책은 $ wp_query 변수를 일시적으로 납치 한 다음 루프를 닫은 후 다시 할당하는 것입니다. 예 :

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args=array(
   'post_type'=>'post',
   'cat' => 6,
   'posts_per_page' => 5,
   'paged'=>$paged
);
$temp = $wp_query;
$wp_query= null;
$wp_query = new 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(); ?>

마지막 단계는 $ wp_query 변수를 원래 있던 것에 다시 할당 한 다음 쿼리를 다시 시작하도록 재설정하는 것입니다.

* 편집 : * 고정 PHP 태그. 좋은 눈 저격수.


PageNavi가 플러그인에서 언제 이러한 변경을했는지 모르지만 Wordpress 3.0 이후로 $ wp_query 변수를 납치하여 페이지 매김을 사용자 정의 루프에 표시해야했습니다. 기꺼이 도와 드리겠습니다! : D
PNMG

8
wp_pagenavi() 이제 query인수 도 허용 하므로 덮어 쓰는 대신 쓸 $wp_query수 있습니다 wp_pagename( array( 'query' => $my_query ) ).
Jan Fabry

이 솔루션은 저에게 효과적이었습니다. 이 루프 앞에 다른 루프가 있으므로 예제의 코드 앞에 wp_reset_query ()를 추가해야했습니다.
Ryan

를 사용하여 사용자 지정 쿼리를 사용한 숫자 매김에 대한 다른 가능한 솔루션 은 이 답변 을 참조하십시오 WP_Query();.
Michael Ecklund

10

오늘 일찍 비슷한 문제가 발생했습니다 ...

맞춤 게시물 유형과 동일한 슬러그가있는 페이지 또는 게시물이 있습니까? 의미는 / real-estate가있는 페이지의 URL이며 / real-estate에서 사용자 정의 게시물 유형 URL을 다시 작성합니까?

이 경우 동일한 URL을 가진 2를 가질 수 없거나 워드 프레스가 혼란스러워집니다.

URL을 변경하거나 http://wordpress.org/support/topic/pagination-with-custom-post-type-listing?replies=23#post-1637753을 사용해보십시오 . 내 URL을 변경하기로 결정했지만 거기에있는 누군가가 문제를 해결하기 위해 사용자 정의 쿼리를 작성했습니다.


나는 같은 이름의 것을 가지고 있다고 생각하지 않습니다. 실제로 "Quick Move In-60 Days"라는 새 페이지를 만들고 페이지 템플릿을 만들어 루프를 추가했습니다.
nurain

6

나는 이것을 사용자 지정 페이지 매김에 사용하고 있으며 잘 작동합니다.

//paginations for newsletter

     //define in function file
      function custom_pagination($numpages = '', $pagerange = '', $paged='')  {

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

      /**
       * This first part of our function is a fallback
       * for custom pagination inside a regular loop that
       * uses the global $paged and global $wp_query variables.
       * 
       * It's good because we can now override default pagination
       * in our theme, and use this function in default queries
       * and custom queries.
       */

      if ($paged == '') {
          global $paged;
          if (empty($paged)) {
            $paged = 1;
          }
      }
      if ($numpages == '') {
        global $wp_query;
        $numpages = $wp_query->max_num_pages;
        if(!$numpages) {
            $numpages = 1;
        }
      }

      /** 
       * We construct the pagination arguments to enter into our paginate_links
       * function. 
       */

      $pagination_args = array(
        'base'            => get_pagenum_link(1) . '%_%',
        'format'          => 'page/%#%',
        'total'           => $numpages,
        'current'         => $paged,
        'show_all'        => false,
        'end_size'        => 1,
        'mid_size'        => $pagerange,
        'prev_next'       => true,
        'prev_text'       => __('&#9668;'),
        'next_text'       => __('&#9658;'),
        'type'            => 'plain',
        'add_args'        => true,
        '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'>Page " . $paged . " of " . $numpages . "</span> ";
          echo $paginate_links;
        echo "</nav>";
      }
    }
    ?>

// template-newsletter와 같은 템플릿에 대해 이것을 정의하십시오.

    <?php  $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
                               $newslatter_detail = array(
                               'post_type' => 'newsletter',
                               'post_status' => 'publish',
                               'posts_per_page' =>4,
                               'order' => 'ASC',
                               //'orderby' =>'date',
                               'paged' => $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 { ?>
                 No Forum List found.
                <?php } ?>

              <div class="pagination">
                    <?php
                       if (function_exists(custom_pagination)) {
                        custom_pagination($posts->max_num_pages,"",$paged);
                       }
                       ?>
                 </div>

안녕하세요 custom_pagination () 함수는 테마 함수 파일 또는 플러그인 함수 파일에 정의되어 있습니다. 이 코드를 템플릿 파일에 넣은 후에 위의 주석 부분 뒤에 이것을 정의하십시오.
Adnan Limdiwala

이 Ans에 관한 모든 문제는 당신에게 잘 작동하기를 바랍니다
Adnan Limdiwala

2

이것은 nurain의 원본 코드 일부와 Jan Fabry의 답변을 사용하여 나를 위해 일한 솔루션입니다.

<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$myquery = new WP_Query(
    array(
        'posts_per_page' => '2',
        'paged'=>$paged
        // add any other parameters to your wp_query array
    )   
);  
?>

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

<!-- Start your post. Below an example: -->

<div class="article-box">                               
<h2 class="article-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<p class="article-excerpt"><?php echo(get_the_excerpt()); ?></p>                        
</div>

<!-- End of your post -->

<?php endwhile; ?>
<?php wp_pagenavi( array( 'query' => $myquery ) ); ?><!-- IMPORTANT: make sure to include an array with your previously declared query values in here -->
<?php wp_reset_query(); ?>
<?php else : ?>
<p>No posts found</p>
<?php endif; ?>

1

당신은 페이지 매김이 작동 할 수있는이 방법을 사용하여 사용자 정의 게시물 유형을 표시 할 수 있습니다!

<?php
  query_posts( array( 'post_type' => 'post', 'posts_per_page' => '2', 'paged' =>     get_query_var( 'paged' ) ) ); 

  if (have_posts() ) :  while (have_posts() ) : the_post(); 
?>
<!-- Start your post. Below an example: -->
<div class="article-box">                               
<h2 class="article-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<p class="article-excerpt"><?php echo(get_the_excerpt()); ?></p>                        
</div>
<!-- End of your post -->
<?php endwhile; ?>
<?php wp_pagenavi(); ?><!-- IMPORTANT: make sure to include an array with your previously declared query values in here -->
<?php wp_reset_query(); ?>
<?php else : ?>
<p>No posts found</p>
<?php endif; ?>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.