L'impaginazione non funziona con il loop personalizzato


42

Ho un ciclo personalizzato che sto usando per visualizzare alcuni annunci immobiliari che saranno disponibili entro 60 giorni. Lo sto chiamando con la seguente funzione:

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

Mentre il ciclo funziona alla grande, non riesco a impaginare. Mostra i primi 10 post (impostazione predefinita) ma non mostra l'impaginazione. L'unico modo per visualizzare tutti i post è mostrarli su una pagina aggiungendo 'posts_per_page' => -1,ho loop simili su altre pagine che non hanno problemi di paginazione. L'unica differenza con questo è che ci sono due meta-chiavi che filtrano i post.

Sto usando WP Page Navi per questo e il resto delle mie pagine. Sto chiudendo il ciclo e aggiungendo l'impaginazione usando il seguente codice:

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

Come posso risolvere questo problema?


Dopo aver risposto rileggo la tua domanda ... Intendevi forse che il tuo plug-in pagenavi non veniva visualizzato o che l'impaginazione ti portava su un 404?
eileencodes

Pagina WP Navi non viene visualizzata sui post con query simili (filtrate da più di una meta chiave). Appare su tutte le altre pagine come archivi, blog, ecc.
nurain,

Risposte:


39

Ho riscontrato questo problema con PageNavi prima. La mia soluzione è quella di dirottare temporaneamente la variabile $ wp_query e quindi riassegnarla dopo aver chiuso il ciclo. Un esempio:

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

L'ultimo passo è riassegnare la variabile $ wp_query a ciò che era originariamente e quindi reimpostare la query per iniziare.

* Modifica: * Risolto il problema con il tag php. Buon cecchino.


Non so quando PageNavi abbia apportato questa modifica nel loro plugin, ma da Wordpress 3.0 ho dovuto dirottare la variabile $ wp_query per ottenere l'impaginazione da mostrare sui loop personalizzati. Sono contento di poterti aiutare! : D
PNMG

8
wp_pagenavi() ora accetta anche l' queryargomento , quindi invece di sovrascrivere $wp_querypuoi scrivere wp_pagename( array( 'query' => $my_query ) ).
Jan Fabry,

Questa soluzione ha funzionato per me. Avevo un altro ciclo prima di questo, quindi ho dovuto aggiungere un wp_reset_query () prima del codice nell'esempio.
Ryan,

Vedi questa risposta per un'altra possibile soluzione per l'impaginazione numerica con l'utilizzo di query personalizzate WP_Query();.
Michael Ecklund,

11

Ho avuto un problema simile prima oggi ...

Hai un tipo di post personalizzato e una pagina o un post con la stessa lumaca? Il significato è l'URL di una pagina che hai / real-estate e il tipo di post personalizzato url riscrive in / real-estate?

In tal caso, non puoi avere 2 con lo stesso URL, altrimenti wordpress viene confuso.

Puoi modificare l'URL o provare questo http://wordpress.org/support/topic/pagination-with-custom-post-type-listing?replies=23#post-1637753 . Ho scelto di cambiare il mio url, ma qualcuno lì ha scritto una query personalizzata per aggirare il problema


Non credo di avere qualcosa che abbia lo stesso nome. In realtà ho creato una nuova pagina chiamata "Quick Move In - 60 Days" e ho aggiunto il loop creando un modello di pagina.
nurain,

7

Sto usando questo per l'impaginazione personalizzata e il suo lavoro bene

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

// Definiscilo per qualsiasi modello come modello-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>

Ciao funzione custom_pagination () definita nel file delle funzioni del tema o nel file delle funzioni del plugin. e dopo aver inserito questo codice nel tuo file modello Definisci questo dopo la parte del commento nel codice sopra = Definisci questo per qualsiasi modello come modello-newsletter per qualsiasi modello come modello-newsletter se qualsiasi domanda, fammelo sapere qui.
Adnan Limdiwala,

Qualsiasi problema riguardante questo Ans spero che funzioni bene per te
Adnan Limdiwala,

3

Questa è la soluzione che ha funzionato per me, usando parte del codice originale di Nurain e la risposta di 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

Puoi visualizzare il tuo tipo di post personalizzato usando questo metodo, la tua impaginazione può funzionare !!!

<?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; ?>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.