Я хочу разбиение на страницы на странице параметров плагина wordpress?

МОЙ ДЕМО

Я хочу разбиение на страницы в соответствии с результатами, поступающими из базы данных wordpress … Все это делается на моей странице параметров плагина wordpress ..

Мой код для извлечения из базы данных выглядит следующим образом

$per_page=5; $sql = "SELECT * FROM wp_dive "; $result = $wpdb->get_results($sql_10) or die(mysql_error()); $length=count($result); $pages = ceil($length/$per_page); foreach( $result as $results ) { $id=$results->id; $name= $results->name_cust; $gender= $results->gender_cust; $dob= $results->dob_cust; <?php $html= "<div class=\"divContentBody\">";?> <?php $html .= "<span class=\"clsOrderNo\">". $id."</span>";?> <?php $html .= "<span class=\"clsName\">". $name."</span>";?> <?php $html .= "<span class=\"clsGender\">".$gender."</span>";?> <?php $html .= "<span class=\"clsDOB\">". $dob ."</span>";?> <?php $html .= "</div>"?> <?php $data_html .=$html; } ?> 

Я получаю данные динамически. Я просто хочу добавить разбивку на страницы .. показать 5 записей на первой странице и соответственно …

Собственный способ сделать это – расширить класс WP_List_Table и позволить WordPress обрабатывать все особенности отображения таблицы. Я знаю это из внутренней проверки ссылок плагином от kaiser . Ниже приведен пример разделенной версии, которая выполняет очень простой SQL-запрос.

Во-первых, нам нужна вспомогательная страница (с использованием PHP5.3 + анонимных функций):

 add_action('admin_menu', function() { add_menu_page( 'TE', '<span style="color:#e57300;">Table Example</span>', 'edit_pages', 'table-example', function() { echo '<div class="wrap">'; screen_icon('edit'); echo '<h2>Table Example</h2>'; new B5F_WP_Table(); echo '</div>'; }, 'http://sstatic.net/stackexchange/img/favicon.ico', 1 // create before Dashboard menu item ); }); 

Это конечный результат:

пользовательская таблица wp

И здесь класс, который выполняет все (обратите внимание на необходимость импорта основного класса). Вам нужно будет настроить запрос и столбцы таблицы для ваших данных.

 if( is_admin() && !class_exists( 'WP_List_Table' ) ) require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' ); class B5F_WP_Table extends WP_List_Table { private $order; private $orderby; private $posts_per_page = 5; public function __construct() { parent :: __construct( array( 'singular' => 'table example', 'plural' => 'table examples', 'ajax' => true ) ); $this->set_order(); $this->set_orderby(); $this->prepare_items(); $this->display(); } private function get_sql_results() { global $wpdb; $args = array( 'ID', 'post_title', 'post_date', 'post_content', 'post_type' ); $sql_select = implode( ', ', $args ); $sql_results = $wpdb->get_results(" SELECT $sql_select FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY $this->orderby $this->order " ); return $sql_results; } public function set_order() { $order = 'DESC'; if ( isset( $_GET['order'] ) AND $_GET['order'] ) $order = $_GET['order']; $this->order = esc_sql( $order ); } public function set_orderby() { $orderby = 'post_date'; if ( isset( $_GET['orderby'] ) AND $_GET['orderby'] ) $orderby = $_GET['orderby']; $this->orderby = esc_sql( $orderby ); } /** * @see WP_List_Table::ajax_user_can() */ public function ajax_user_can() { return current_user_can( 'edit_posts' ); } /** * @see WP_List_Table::no_items() */ public function no_items() { _e( 'No posts found.' ); } /** * @see WP_List_Table::get_views() */ public function get_views() { return array(); } /** * @see WP_List_Table::get_columns() */ public function get_columns() { $columns = array( 'ID' => __( 'ID' ), 'post_title' => __( 'Title' ), 'post_date' => __( 'Date' ), 'post_type' => __( 'Type' ) ); return $columns; } /** * @see WP_List_Table::get_sortable_columns() */ public function get_sortable_columns() { $sortable = array( 'ID' => array( 'ID', true ), 'post_title' => array( 'post_title', true ), 'post_date' => array( 'post_date', true ) ); return $sortable; } /** * Prepare data for display * @see WP_List_Table::prepare_items() */ public function prepare_items() { $columns = $this->get_columns(); $hidden = array(); $sortable = $this->get_sortable_columns(); $this->_column_headers = array( $columns, $hidden, $sortable ); // SQL results $posts = $this->get_sql_results(); empty( $posts ) AND $posts = array(); # >>>> Pagination $per_page = $this->posts_per_page; $current_page = $this->get_pagenum(); $total_items = count( $posts ); $this->set_pagination_args( array ( 'total_items' => $total_items, 'per_page' => $per_page, 'total_pages' => ceil( $total_items / $per_page ) ) ); $last_post = $current_page * $per_page; $first_post = $last_post - $per_page + 1; $last_post > $total_items AND $last_post = $total_items; // Setup the range of keys/indizes that contain // the posts on the currently displayed page(d). // Flip keys with values as the range outputs the range in the values. $range = array_flip( range( $first_post - 1, $last_post - 1, 1 ) ); // Filter out the posts we're not displaying on the current page. $posts_array = array_intersect_key( $posts, $range ); # <<<< Pagination // Prepare the data $permalink = __( 'Edit:' ); foreach ( $posts_array as $key => $post ) { $link = get_edit_post_link( $post->ID ); $no_title = __( 'No title set' ); $title = ! $post->post_title ? "<em>{$no_title}</em>" : $post->post_title; $posts[ $key ]->post_title = "<a title='{$permalink} {$title}' href='{$link}'>{$title}</a>"; } $this->items = $posts_array; } /** * A single column */ public function column_default( $item, $column_name ) { return $item->$column_name; } /** * Override of table nav to avoid breaking with bulk actions & according nonce field */ public function display_tablenav( $which ) { ?> <div class="tablenav <?php echo esc_attr( $which ); ?>"> <!-- <div class="alignleft actions"> <?php # $this->bulk_actions( $which ); ?> </div> --> <?php $this->extra_tablenav( $which ); $this->pagination( $which ); ?> <br class="clear" /> </div> <?php } /** * Disables the views for 'side' context as there's not enough free space in the UI * Only displays them on screen/browser refresh. Else we'd have to do this via an AJAX DB update. * * @see WP_List_Table::extra_tablenav() */ public function extra_tablenav( $which ) { global $wp_meta_boxes; $views = $this->get_views(); if ( empty( $views ) ) return; $this->views(); } } 

Помощник плагина для стиля администратора: WordPress Admin Style , by bueltge

Возьмите это https://stackoverflow.com/a/16358219/1596547 и примените его к вашим потребностям, таким как:

 $pagenum = isset( $_GET['pagenum'] ) ? absint( $_GET['pagenum'] ) : 1; $limit = 5; // number of rows in page $offset = ( $pagenum - 1 ) * $limit; $total = $wpdb->get_var( "SELECT COUNT(`id`) FROM `wp_dive`" ); $num_of_pages = ceil( $total / $limit ); $result = $wpdb->get_results( "SELECT `id`,`name_cust`,`gender_cust`,`dob_cust` FROM `wp_dive` LIMIT $offset, $limit" ); $data_html = ''; foreach( $result as $results ) { $id=$results->id; $name= $results->name_cust; $gender= $results->gender_cust; $dob= $results->dob_cust; ?> <?php $html= "<div class=\"divContentBody\">";?> <?php $html .= "<span class=\"clsOrderNo\">". $id."</span>";?> <?php $html .= "<span class=\"clsName\">". $name."</span>";?> <?php $html .= "<span class=\"clsGender\">".$gender."</span>";?> <?php $html .= "<span class=\"clsDOB\">". $dob ."</span>";?> <?php $html .= "</div>"?> <?php $data_html .=$html; } echo $data_html; $page_links = paginate_links( array( 'base' => add_query_arg( 'pagenum', '%#%' ), 'format' => '', 'prev_text' => __( '&laquo;', 'aag' ), 'next_text' => __( '&raquo;', 'aag' ), 'total' => $num_of_pages, 'current' => $pagenum ) ); if ( $page_links ) { echo '<div class="tablenav"><div class="tablenav-pages" style="margin: 1em 0">' . $page_links . '</div></div>'; } конечных $pagenum = isset( $_GET['pagenum'] ) ? absint( $_GET['pagenum'] ) : 1; $limit = 5; // number of rows in page $offset = ( $pagenum - 1 ) * $limit; $total = $wpdb->get_var( "SELECT COUNT(`id`) FROM `wp_dive`" ); $num_of_pages = ceil( $total / $limit ); $result = $wpdb->get_results( "SELECT `id`,`name_cust`,`gender_cust`,`dob_cust` FROM `wp_dive` LIMIT $offset, $limit" ); $data_html = ''; foreach( $result as $results ) { $id=$results->id; $name= $results->name_cust; $gender= $results->gender_cust; $dob= $results->dob_cust; ?> <?php $html= "<div class=\"divContentBody\">";?> <?php $html .= "<span class=\"clsOrderNo\">". $id."</span>";?> <?php $html .= "<span class=\"clsName\">". $name."</span>";?> <?php $html .= "<span class=\"clsGender\">".$gender."</span>";?> <?php $html .= "<span class=\"clsDOB\">". $dob ."</span>";?> <?php $html .= "</div>"?> <?php $data_html .=$html; } echo $data_html; $page_links = paginate_links( array( 'base' => add_query_arg( 'pagenum', '%#%' ), 'format' => '', 'prev_text' => __( '&laquo;', 'aag' ), 'next_text' => __( '&raquo;', 'aag' ), 'total' => $num_of_pages, 'current' => $pagenum ) ); if ( $page_links ) { echo '<div class="tablenav"><div class="tablenav-pages" style="margin: 1em 0">' . $page_links . '</div></div>'; } 

Вы запрашиваете с posts_per_page , но для того, чтобы использовать разбиение на страницы, вам также нужно добавить параметр 'paged' в ваш запрос.

См. WP Codex здесь:

http://codex.wordpress.org/Pagination#Adding_the_.22paged.22_parameter_to_a_query

 <?php global $wpdb; $paged = isset( $_GET['paged'] ) ? (int) $_GET['paged'] : 1; $limit = 10; // Row in a single $offset = ( $paged - 1 ) * $limit; $total = $wpdb->get_var( 'SELECT COUNT(`id`) FROM `wp_dive`' ); $num_of_pages = ceil( $total / $limit ); $result = $wpdb->get_results( "SELECT `id`,`name_cust`,`gender_cust`,`dob_cust` FROM `wp_dive` LIMIT $offset, $limit" ); $data_html = ''; foreach( $result as $results ) { $id=$results->id; $name= $results->name_cust; $gender= $results->gender_cust; $dob= $results->dob_cust; ?> <?php $html= "<div class=\"divContentBody\">";?> <?php $html .= "<span class=\"clsOrderNo\">". $id."</span>";?> <?php $html .= "<span class=\"clsName\">". $name."</span>";?> <?php $html .= "<span class=\"clsGender\">".$gender."</span>";?> <?php $html .= "<span class=\"clsDOB\">". $dob ."</span>";?> <?php $html .= "</div>"?> <?php $data_html .=$html; } echo $data_html; $page_links = paginate_links( array( 'base' => add_query_arg( 'paged', '%#%' ), 'format' => '', 'prev_text' => '&laquo;', 'next_text' => '&raquo;', 'total' => $total, 'current' => $paged ) ); if ( $page_links ) { echo '<div class="tablenav"><div class="tablenav-pages" style="margin: 1em 0">' . $page_links . '</div></div>'; } ?> конечных <?php global $wpdb; $paged = isset( $_GET['paged'] ) ? (int) $_GET['paged'] : 1; $limit = 10; // Row in a single $offset = ( $paged - 1 ) * $limit; $total = $wpdb->get_var( 'SELECT COUNT(`id`) FROM `wp_dive`' ); $num_of_pages = ceil( $total / $limit ); $result = $wpdb->get_results( "SELECT `id`,`name_cust`,`gender_cust`,`dob_cust` FROM `wp_dive` LIMIT $offset, $limit" ); $data_html = ''; foreach( $result as $results ) { $id=$results->id; $name= $results->name_cust; $gender= $results->gender_cust; $dob= $results->dob_cust; ?> <?php $html= "<div class=\"divContentBody\">";?> <?php $html .= "<span class=\"clsOrderNo\">". $id."</span>";?> <?php $html .= "<span class=\"clsName\">". $name."</span>";?> <?php $html .= "<span class=\"clsGender\">".$gender."</span>";?> <?php $html .= "<span class=\"clsDOB\">". $dob ."</span>";?> <?php $html .= "</div>"?> <?php $data_html .=$html; } echo $data_html; $page_links = paginate_links( array( 'base' => add_query_arg( 'paged', '%#%' ), 'format' => '', 'prev_text' => '&laquo;', 'next_text' => '&raquo;', 'total' => $total, 'current' => $paged ) ); if ( $page_links ) { echo '<div class="tablenav"><div class="tablenav-pages" style="margin: 1em 0">' . $page_links . '</div></div>'; } ?>