Php 在WordPress足球池中添加分页

Php 在WordPress足球池中添加分页,php,wordpress,class,pagination,ranking-functions,Php,Wordpress,Class,Pagination,Ranking Functions,我正在使用wordpress插件制作一个足球池。一个非常好的插件,但是排名中没有分页。因此,当你有超过1000名参与者时,你会得到一份很长的名单 插件作者提供了一个可以用来创建分页的类。不幸的是,我的php知识在这方面非常薄弱 这是分页类: <?php class Football_Pool_Pagination { public $show_total = true; public $page_param = 'paged'; public $curren

我正在使用wordpress插件制作一个足球池。一个非常好的插件,但是排名中没有分页。因此,当你有超过1000名参与者时,你会得到一份很长的名单

插件作者提供了一个可以用来创建分页的类。不幸的是,我的php知识在这方面非常薄弱

这是分页类:

    <?php
class Football_Pool_Pagination {
    public $show_total = true;
    public $page_param = 'paged';
    public $current_page = 1;
    public $wrap = false;

    private $total_pages = 0;
    private $total_items = 0;
    private $page_size = 20;

    public function __construct( $num_items, $wrap = false ) {
        $this->total_items = $num_items;
        $this->total_pages = $this->calc_total_pages( $num_items, $this->page_size );
        $this->current_page = $this->get_pagenum();
        $this->wrap = $wrap;
    }

    public function get_page_size() {
        return $this->page_size;
    }
    public function set_page_size( $size ) {
        $this->page_size = $size;
        $this->total_pages = $this->calc_total_pages( $this->total_items, $this->page_size );
        $this->current_page = $this->get_pagenum();
    }

    public function show( $return = 'echo' ) {
        $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );

        if ( $this->total_pages ) {
            $page_class = $this->total_pages < 2 ? ' one-page' : '';
        } else {
            $page_class = ' no-pages';
        }

        $output = '';
        if ( $this->wrap ) $output .= sprintf( '<div class="tablenav top%s">', $page_class );

        $output .= sprintf( '<div class="tablenav-pages%s">', $page_class );
        if ( $this->show_total ) {
            $output .= sprintf( '<span class="displaying-num">%s</span>'
                            , sprintf( _n( '1 item', '%s items', $this->total_items, FOOTBALLPOOL_TEXT_DOMAIN )
                                        , $this->total_items
                                )
                        );
        }

        $disable_first = $disable_last = '';
        if ( $this->current_page == 1 ) {
            $disable_first = ' disabled';
        }
        if ( $this->current_page == $this->total_pages ) {
            $disable_last = ' disabled';
        }

        $output .= '<span class="pagination-links">';
        $output .= sprintf( '<a class="first-page%s" title="%s" href="%s">&laquo;</a>'
                            , $disable_first
                            , esc_attr__( 'Go to the first page' )
                            , esc_url( remove_query_arg( $this->page_param, $current_url ) )
                    );
        $output .= sprintf( '<a class="prev-page%s" title="%s" href="%s">&lsaquo;</a>'
                            , $disable_first
                            , esc_attr__( 'Go to the previous page' )
                            , esc_url( add_query_arg( 
                                            $this->page_param, max( 1, $this->current_page - 1 ), 
                                            $current_url ) )
                    );

        $output .= sprintf( '<span class="paging-input"><input class="current-page" title="%s" type="text" name="%s" value="%d" size="%d"> of <span class="total-pages">%d</span></span>'
                            , esc_attr__( 'Current page' )
                            , $this->page_param
                            , $this->current_page
                            , strlen( $this->total_pages )
                            , $this->total_pages
                    );

        $output .= sprintf( '<a class="next-page%s" title="%s" href="%s">&rsaquo;</a>'
                            , $disable_last
                            , esc_attr__( 'Go to the next page' )
                            , esc_url( add_query_arg( 
                                            $this->page_param, min( $this->total_pages, $this->current_page + 1 ), 
                                            $current_url ) )
                    );
        $output .= sprintf( '<a class="last-page%s" title="%s" href="%s">&raquo;</a>'
                            , $disable_last
                            , esc_attr__( 'Go to the last page' )
                            , esc_url( add_query_arg( $this->page_param, $this->total_pages, $current_url ) )
                    );
        $output .= '</span></div>';

        if ( $this->wrap ) $output .= '</div>';

        if ( $return == 'echo' ) {
            echo $output;
        } else {
            return $output;
        }
    }

    private function calc_total_pages( $num_items, $page_size ) {
        return ceil( $num_items / $page_size );
    }

    private function get_pagenum() {
        $page_num = Football_Pool_Utils::request_int( $this->page_param, 0 );

        if( $page_num > $this->total_pages ) {
            $page_num = $this->total_pages;
        }

        return max( 1, $page_num );
    }

}

我认为你应该使用这个插件:

它必须节省您的时间,并降低项目的复杂性


谢谢

谢谢你的回答,但这是一个为帖子和页面添加分页的插件。。。我怎样才能用它来满足我的需要。。为了让reacords获得分页?访问并找到合适的位置,然后按照此方法放置此代码
<?php
class Football_Pool_Ranking_Page {
    public function page_content()
    {
        global $current_user;
        get_currentuserinfo();

        $output = '';
        $pool = new Football_Pool_Pool;
        // $userleague = get_the_author_meta( 'footballpool_league', $current_user->ID );
        $userleague = $pool->get_league_for_user( $current_user->ID );
        $userleague = ( isset( $userleague ) && is_integer( $userleague ) ) ? $userleague : FOOTBALLPOOL_LEAGUE_ALL;
        $league =  Football_Pool_Utils::post_string( 'league', $userleague );

        $ranking_display = Football_Pool_Utils::get_fp_option( 'ranking_display', 0 );
        if ( $ranking_display == 1 ) {
            $ranking = Football_Pool_Utils::post_int( 'ranking', FOOTBALLPOOL_RANKING_DEFAULT );
        } elseif ( $ranking_display == 2 ) {
            $ranking = Football_Pool_Utils::get_fp_option( 'show_ranking', FOOTBALLPOOL_RANKING_DEFAULT );
        } else {
            $ranking = FOOTBALLPOOL_RANKING_DEFAULT;
        }

        $user_defined_rankings = $pool->get_rankings( 'user defined' );
        if ( $pool->has_leagues || ( $ranking_display == 1 && count( $user_defined_rankings ) > 0 ) ) {
            $output .= sprintf( '<form action="%s" method="post"><div style="margin-bottom: 1em;">'
                                , get_page_link() 
                        );
            if ( $pool->has_leagues ) {
                $output .= sprintf( '%s: %s',
                                    __( 'Choose league', FOOTBALLPOOL_TEXT_DOMAIN ),
                                    $pool->league_filter( $league )
                            );
            }

            if ( $ranking_display == 1 && count( $user_defined_rankings ) > 0 ) {
                $options = array();
                $options[FOOTBALLPOOL_RANKING_DEFAULT] = '';
                foreach( $user_defined_rankings as $user_defined_ranking ) {
                    $options[$user_defined_ranking['id']] = $user_defined_ranking['name'];
                }
                $output .= sprintf( '<br />%s: %s'
                                    , __( 'Choose ranking', FOOTBALLPOOL_TEXT_DOMAIN )
                                    , Football_Pool_Utils::select( 
                                                            'ranking', $options, $ranking )
                            );
            }
            $output .= sprintf( '<input type="submit" name="_submit" value="%s" />'
                                , __(  'go', FOOTBALLPOOL_TEXT_DOMAIN )
                        );
            $output .= '</div></form>';
        }

        $output .= $pool->print_pool_ranking( $league, $current_user->ID, $ranking );

        return $output;
    }
}
public function print_pool_ranking( $league, $user, $ranking_id = FOOTBALLPOOL_RANKING_DEFAULT ) {
    $output = '';

    $rows = $this->get_pool_ranking( $league, $ranking_id );
    $ranking = $users = array();
    if ( count( $rows ) > 0 ) {
        // there are results in the database, so get the ranking
        foreach ( $rows as $row ) {
            $ranking[] = $row;
            $users[] = $row['user_id'];
        }
    } else {
        // no results, show a list of users
        $rows = $this->get_users( $league );
        if ( count( $rows ) > 0 ) {
            $output .= '<p>' . __( 'No results yet. Below is a list of all users.', FOOTBALLPOOL_TEXT_DOMAIN ) . '</p>';
            foreach ( $rows as $row ) {
                $ranking[] = $row;
                $users[] = $row['user_id'];
            }
        } else {
            $output .= '<p>'. __( 'No users have registered for this pool (yet).', FOOTBALLPOOL_TEXT_DOMAIN ) . '</p>';
        }
    }

    if ( count( $ranking ) > 0 ) {
        // get number of predictions per user if option is set
        $show_num_predictions = ( Football_Pool_Utils::get_fp_option( 'show_num_predictions_in_ranking' ) == 1 );
        if ( $show_num_predictions ) {
            $predictions = $this->get_prediction_count_per_user( $users, $ranking_id );
        }

        $userpage = Football_Pool::get_page_link( 'user' );
        $all_user_view = ( $league == FOOTBALLPOOL_LEAGUE_ALL && $this->has_leagues );
        $i = 1;

        $output .= '<table class="standen">';
        if ( $show_num_predictions ) {
            $output .= sprintf( '<tr>
                                    <th>positie</th>
                                    <th>%s</th>
                                    <th>%s</th>
                                    <th>%s</th>
                                    %s</tr>'
                                , __( 'user', FOOTBALLPOOL_TEXT_DOMAIN )
                                , __( 'predictions', FOOTBALLPOOL_TEXT_DOMAIN )
                                , __( 'points', FOOTBALLPOOL_TEXT_DOMAIN )
                                , ( $all_user_view ? '<th></th>' : '' )
                        );
        }
        foreach ( $ranking as $row ) {
            $class = ( $i % 2 != 0 ? 'even' : 'odd' );
            if ( $all_user_view ) $class .= ' league-' . $row['league_id'];
            if ( $row['user_id'] == $user ) $class .= ' currentuser';
            if ( $show_num_predictions ) {
                if ( array_key_exists( $row['user_id'], $predictions ) ) {
                    $num_predictions = $predictions[$row['user_id']];
                } else {
                    $num_predictions = 0;
                }
                $num_predictions = sprintf( '<td>%d</td>', $num_predictions );
            } else {
                $num_predictions = '';
            }
            $output .= sprintf( '<tr class="%s"><td style="width:100px; text-align: center;">%d.</td>
                                <td><a href="%s">%s%s</a>%s</td>
                                %s<td>%d</td>%s
                                </tr>',
                            $class,
                            $i++,
                            esc_url( add_query_arg( array( 'user' => $row['user_id'] ), $userpage ) ),
                            $this->get_avatar( $row['user_id'], 'medium' ),
                            $row['user_name'],
                            Football_Pool::user_name( $row['user_id'], 'label' ),
                            $num_predictions,
                            $row['points'],
                            ( $all_user_view ? $this->league_image( $row['league_id'] ) : '' )
                        );
            $output .= "\n";
        }
        $output .= '</table>';
    }

    return $output;
}