【问题标题】:Paginating get_posts() in Wordpress在 Wordpress 中对 get_posts() 进行分页
【发布时间】:2011-03-24 07:04:31
【问题描述】:

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

我不想得到这样的东西

>

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

【问题讨论】:

    标签: php wordpress pagination posts


    【解决方案1】:

    这是我使用的分页类:

    <?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>';
            }
    
        }
    

    【讨论】:

    • 我得到这些错误:警告:mysql_fetch_array() 期望参数 1 是资源,在 C:\xampp\htdocs\wordpress\wp-content\themes\safwan\page-paginated.php 中给出的布尔值在第 13 行警告:array_shift() 期望参数 1 是数组,在第 14 行的 C:\xampp\htdocs\wordpress\wp-content\themes\safwan\page-paginated.php 中给出 null
    • 第 13 行是:$row = mysql_fetch_array($number);第 14 行是:$num_rows = array_shift($row);
    • 我会确保确实填充了变量 $wpdb->blogs 和 $wpdb->siteid。我为此使用了wordpress 3.0。如果这些 var 没有回显出您所期望的,那么这将抛出填充 $count var 的查询结果。
    猜你喜欢
    • 2017-04-14
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    相关资源
    最近更新 更多