2010-08-02 98 views
1

这是我wordpress中的一个模板页面(已经删除了html),它从我的wordpress数据库中提取帖子。我想分页但不知道! :(在Wordpress中分页get_posts()

我wan't得到这样的事情

<< First Prev 1 2 3 4 Next Last >>

 <?php 
     $postslist = get_posts('numberposts=10&order=ASC'); 
     foreach ($postslist as $post) : 
      setup_postdata($post); 
    ?> 

     <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?> </a></li> 
    <li><?php the_excerpt(); ?></li><br/><hr/> 

    <?php endforeach; ?> 

回答

2

这里有一个分页类使用:

<?php 

class sitePagination{ 

    public $currentPage; 
    public $perPage; 
    public $totalRecords; 

    public function __construct($page = 1,$per_page = 2, $total_records = 0){ 
     $this->currentPage = (int)$page; 
     $this->perPage = (int)$per_page; 
     $this->totalRecords = (int)$total_records; 
    } 

    public function totalPages(){ 
     return ceil($this->totalRecords/$this->perPage); 
    } 

    public function previousPage(){ 
     return $this->currentPage - 1; 
    } 

    public function nextPage(){ 
     return $this->currentPage + 1; 
    } 

    public function previousPageExists(){ 
     return $this->previousPage() >= 1 ? true : false; 
    } 

    public function nextPageExists(){ 
     return $this->nextPage() <= $this->totalPages() ? true : false; 
    } 

    public function offset(){ 
     return ($this->currentPage - 1) * $this->perPage; 
    } 

} 

?> 

然后在page.html中,我用这个:

//include the paginate class. I put it in the theme folder 
    include("paginate.php"); 

    //This is the SQL Query to get the number of rows I have 
    $count = "SELECT COUNT(*) FROM $wpdb->blogs WHERE site_id = $wpdb->siteid AND public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' AND last_updated != '0000-00-00 00:00:00'"; 

    $number = mysql_query($count); 
    $row = mysql_fetch_array($number); 
    $num_rows = array_shift($row); 

    //Define some variable to hold our pagination settings 
    $page = !empty($_GET['current_page']) ? (int)$_GET['current_page'] : 1; 
    $perPage = 5; 
    $paginate = new sitePagination($page,$perPage,$num_rows); 

    //This is the actual SQL Query to fetch the Data from Database 
    $query = $wpdb->prepare("SELECT blog_id, domain, path FROM $wpdb->blogs WHERE site_id = %d AND public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' AND last_updated != '0000-00-00 00:00:00' ORDER BY last_updated DESC LIMIT {$perPage} OFFSET {$paginate->offset()}", $wpdb->siteid); 
    //echo "query is $query<br/>"; 

    $terms = $wpdb->get_results($query,ARRAY_A); 
    echo "<ul>"; 

    foreach($terms as $detail) 
    { 
     //$cat_parent = get_category($detail->parent); 
     //Had to use the $cat_parent to build the link 
     //if some has a better idea, would be nice 
     echo "<li style='font-size:1.3em;'><a href='http://".$detail[ 'domain' ].$detail['path']."'>".get_blog_option($detail['blog_id'], 'blogname')."</a></li>"; 
    } 

    // The Fun starts here, all the code below will generate our dynamic page number 
    // The container class is the same as WP PAGENAVI 
    // I'm using a custom pagination class I created 
    echo "</ul>"; 

    //echo "<span class='pages'>Page {$page} of {$paginate->totalPages()}</span>"; 
    if($paginate->totalPages() > 1){ 
     if($paginate->previousPageExists()){ 
      echo '<a href="?cat='.$cat_parent->term_id.'&current_page='.$paginate->previousPage().'">&laquo; Previous</a>'; 
     } 
    } 
    if(ceil($paginate->totalPages()) > 1){ 
     for($i=1;$i < ceil($paginate->totalPages()) + 1;$i++){ 
      if($page == $i) 
       echo '<span class="current"> '.$i.' </span>'; 
      else 
       echo '<a href="'.$cat_parent->slug.'/?current_page='.$i.'"> '.$i.' </a>'; 

     } 
    } 

    if($paginate->totalPages() > 1){ 
     if($paginate->nextPageExists()){ 
      echo '<a href="?cat='.$cat_parent->term_id.'&current_page='.$paginate->nextPage().'">Next &raquo;</a>'; 
     } 

    } 
+0

我收到这些错误信息: 警告:mysql_fetch_array()期望参数1是资源,在第13行的C:\ xampp \ htdocs \ wordpress \ wp-content \ themes \ safwan \ page-paginated.php中给出布尔值 警告:array_shift()期望参数1是数组,在第14行中的C:\ xampp \ htdocs \ wordpress \ wp-content \ themes \ safwan \ page-paginated.php中给出null – esafwan 2010-08-02 17:19:09

+0

第13行是:$ row = mysql_fetch_array($ number);第14行是:$ num_rows = array_shift($ row); – esafwan 2010-08-02 17:19:50

+0

我会确保变量$ wpdb-> blogs和$ wpdb-> siteid确实被填充。我为此使用了wordpress 3.0。如果这些变量没有回应出你期望的结果,那么这将抛出填充$ count变量的查询结果。 – 2010-08-02 17:40:32