Paginação não funciona com loop personalizado


42

Eu tenho um loop personalizado que estou usando para exibir algumas listagens de imóveis que estarão disponíveis em 60 dias. Estou chamando-o com a seguinte função:

<?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(); ?>

Enquanto o loop funciona muito bem, não consigo paginar. Ele mostra as 10 primeiras postagens (meu padrão), mas não mostra a paginação. A única maneira de exibir todas as postagens é mostrá-las em uma página, adicionando 'posts_per_page' => -1,loops semelhantes em outras páginas que não têm problemas para paginar. A única diferença com este é que existem duas meta chaves que estão filtrando as postagens.

Estou usando o WP Page Navi para isso e para o restante das minhas páginas. Estou fechando o loop e adicionando a paginação usando o seguinte código:

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

Como posso resolver isso?


Depois de responder, reli a sua pergunta ... Você quis dizer que seu plugin pagenavi não estava aparecendo ou que a paginação estava levando você a um 404?
eileencodes

O WP Page Navi não é exibido nas postagens com consultas semelhantes (filtradas por mais de uma meta-chave). Está aparecendo em todas as outras páginas como arquivos, blog etc.
nurain

Respostas:


39

Eu já tive esse problema com o PageNavi antes. Minha solução é seqüestrar temporariamente a variável $ wp_query e reatribuí-la após fechar o loop. Um exemplo:

<?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(); ?>

A última etapa é reatribuir a variável $ wp_query ao que era originalmente e, em seguida, redefinir a consulta novamente para iniciar.

* Edit: * Tag php fixo. Bom atirador de olhos.


Não sei quando o PageNavi fez essa alteração em seu plug-in, mas desde o Wordpress 3.0 eu tive que invadir a variável $ wp_query para que a paginação fosse exibida em loops personalizados. Ainda bem que pude ajudar! : D
PNMG 30/11/2010

8
wp_pagenavi() agora também aceita o queryargumento , portanto, em vez de substituir, $wp_queryvocê pode escrever wp_pagename( array( 'query' => $my_query ) ).
Jan Fabry

Esta solução funcionou para mim. Eu tinha outro loop antes deste, então tive que adicionar um wp_reset_query () antes do código no exemplo.
23911 Ryan

Consulte esta resposta para outra solução possível para Paginação Numérica com consultas personalizadas usando WP_Query();.
Michael Ecklund

11

Eu tive um problema semelhante hoje cedo ...

Você tem um tipo de postagem personalizado e uma página ou postagem com a mesma lesma? Significado é o URL de uma página que você possui / imobiliário e o URL do tipo de postagem personalizada é reescrito em / imobiliário?

Se for esse o caso, você não pode ter 2 com o mesmo URL ou o wordpress fica confuso.

Você pode alterar o URL ou tentar este http://wordpress.org/support/topic/pagination-with-custom-post-type-listing?replies=23#post-1637753 . Optei por alterar meu URL, mas alguém lá escreveu uma consulta personalizada para solucionar o problema


Acho que não tenho nada com o mesmo nome. Na verdade, criei uma nova página chamada "Quick Move In - 60 Days" e adicionei o loop criando um modelo de página para ela.
Nurain

7

Estou usando isso para paginação personalizada e seu trabalho está bom

//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>";
      }
    }
    ?>

// Defina isso para qualquer modelo como 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>

Olá, a função custom_pagination () define no arquivo de funções do tema ou no arquivo de funções do plugin. e depois de colocar esse código no arquivo de modelo Defina isso após a parte do comentário no código acima = Defina isso para qualquer modelo como modelo-boletim informativo para qualquer modelo como modelo-boletim informativo, se houver alguma consulta, por favor me avise aqui.
Adnan Limdiwala

Qualquer questão a respeito deste Ans Espero que sua multa trabalho para você
Adnan Limdiwala

3

Esta é a solução que funcionou para mim, usando parte do código original de nurain e a resposta de 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; ?>

2

Você pode exibir seu tipo de postagem personalizado usando esse método, sua paginação pode funcionar !!!

<?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; ?>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.