web-dev-qa-db-de.com

Die Paginierung funktioniert nicht mit der benutzerdefinierten Schleife

Ich habe eine benutzerdefinierte Schleife, mit der ich einige Immobilienlisten anzeige, die innerhalb von 60 Tagen verfügbar sein werden. Ich rufe es mit folgender Funktion auf:

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

Während die Schleife großartig funktioniert, kann ich sie nicht zum Paginieren bringen. Es zeigt die ersten 10 (meine Standard) Beiträge, aber nicht die Paginierung. Die einzige Möglichkeit, alle Beiträge anzuzeigen, besteht darin, sie auf einer Seite anzuzeigen, indem Sie 'posts_per_page' => -1, hinzufügen. Ich habe ähnliche Schleifen auf anderen Seiten, die keine Probleme beim Paginieren haben. Der einzige Unterschied zu diesem ist, dass es zwei Metaschlüssel gibt, die die Beiträge filtern.

Ich verwende WP Page Navi für diesen und den Rest meiner Seiten. Ich schließe die Schleife und füge die Paginierung mit dem folgenden Code hinzu:

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

Wie kann ich das beheben?

41
nurain

Ich habe dieses Problem bereits mit PageNavi erlebt. Meine Lösung besteht darin, die Variable $ wp_query vorübergehend zu hijacken und sie nach dem Schließen der Schleife erneut zuzuweisen. Ein Beispiel:

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

Der letzte Schritt besteht darin, die Variable $ wp_query der ursprünglichen Variable zuzuweisen und die Abfrage dann zurückzusetzen, um zu starten.

* Bearbeiten: * Feste PHP-Tag. Guter Scharfschütze.

38
PNMG

Ich hatte heute früher ein ähnliches Problem ...

Haben Sie einen benutzerdefinierten Beitragstyp und eine Seite oder einen Beitrag mit demselben Slug? Bedeutet dies, dass die URL einer Seite, die Sie haben/immobilien, und die benutzerdefinierte Post-Typ-URL, die Sie unter/immobilien umschreiben?

Wenn das der Fall ist, können Sie nicht 2 mit der gleichen URL haben, sonst wird WordPress verwirrt.

Sie können entweder die URL ändern oder diese http://wordpress.org/support/topic/pagination-with-custom-post-type-listing?replies=23#post-1637753 . Ich habe beschlossen, meine URL zu ändern, aber jemand dort hat eine benutzerdefinierte Abfrage geschrieben, um das Problem zu umgehen

10
eileencodes

Ich benutze dies für benutzerdefinierte Paginierung und seine Arbeit gut

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

// Definiere dies für jedes Template wie 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>
6
Adnan Limdiwala

Dies ist die Lösung, die für mich funktioniert hat, indem ein Teil des Originalcodes von nurain und die Antwort von Jan Fabry verwendet wurden:

<?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
ChowKaiDeng

Sie können Ihren benutzerdefinierten Beitragstyp anzeigen, indem Sie diese Methode verwenden. Ihre Paginierung kann funktionieren !!!

<?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; ?>
1
Shiv Singh