我认为你有两个选择来实现你在这里的尝试。
选项1:使用自定义帖子类型,这是最简单的方法。WordPress为您完成大部分工作,同时您可以定义自定义管理列、添加帖子元等。WordPress将进行分页,您可以选择将自定义帖子类型的帖子设置为私有或公共。
在哪里可以了解帖子类型
请参阅此处的codex以注册帖子类型:
https://codex.wordpress.org/Function_Reference/register_post_type选项2:如果您仍然喜欢使用自己的数据库表并拥有完全控制权,请使用自己的SQL数据库表。你不需要学习/利用WP_List_Table
班可以扩展该类以显示自定义SQL结果。
下面是一个扩展WP\\u List\\u表的示例。
<?php
if ( ! defined( \'ABSPATH\' ) ) {
exit;
}
if ( ! class_exists( \'WP_List_Table\' ) ) {
require_once( ABSPATH . \'wp-admin/includes/class-wp-list-table.php\' );
}
class Custom_List_Table extends WP_List_Table {
/**
* Initialize the table list.
*/
public function __construct() {
parent::__construct( array(
\'singular\' => __( \'issue\', \'textdomain\' ),
\'plural\' => __( \'issues\', \'textdomain\' ),
\'ajax\' => false
) );
}
/**
* Get list columns.
*
* @return array
*/
public function get_columns() {
return array(
\'cb\' => \'<input type="checkbox" />\',
\'id\' => __( \'ID\', \'textdomain\' ),
\'issue\' => __( \'Issue\', \'textdomain\' ),
);
}
/**
* Column cb.
*/
public function column_cb( $issue ) {
return sprintf( \'<input type="checkbox" name="issue[]" value="%1$s" />\', $issue[\'id\'] );
}
/**
* Return ID column
*/
public function column_id( $issue ) {
return \'\';
}
/**
* Return issue column
*/
public function column_issue( $issue ) {
return \'\';
}
/**
* Get bulk actions.
*
* @return array
*/
protected function get_bulk_actions() {
return array(
);
}
/**
* Prepare table list items.
*/
public function prepare_items() {
global $wpdb;
$per_page = 10;
$columns = $this->get_columns();
$hidden = array();
$sortable = $this->get_sortable_columns();
// Column headers
$this->_column_headers = array( $columns, $hidden, $sortable );
$current_page = $this->get_pagenum();
if ( 1 < $current_page ) {
$offset = $per_page * ( $current_page - 1 );
} else {
$offset = 0;
}
$search = \'\';
if ( ! empty( $_REQUEST[\'s\'] ) ) {
$search = "AND description LIKE \'%" . esc_sql( $wpdb->esc_like( $_REQUEST[\'s\'] ) ) . "%\' ";
}
$items = $wpdb->get_results(
"SELECT id, issue FROM YOUR_TABLE WHERE 1 = 1 {$search}" .
$wpdb->prepare( "ORDER BY id DESC LIMIT %d OFFSET %d;", $per_page, $offset ), ARRAY_A
);
$count = $wpdb->get_var( "SELECT COUNT(id) FROM YOUR_TABLE WHERE 1 = 1 {$search};" );
$this->items = $items;
// Set the pagination
$this->set_pagination_args( array(
\'total_items\' => $count,
\'per_page\' => $per_page,
\'total_pages\' => ceil( $count / $per_page )
) );
}
}
现在,您需要在管理页面的输出中调用此表(例如,从add\\u menu()函数)
$_table_list = new Custom_List_Table();
$_table_list->prepare_items();
echo \'<input type="hidden" name="page" value="" />\';
echo \'<input type="hidden" name="section" value="issues" />\';
$_table_list->views();
$_table_list->search_box( __( \'Search Key\', \'textdomain\' ), \'key\' );
$_table_list->display();