<?php if(!class_exists('WP_List_Table')) { require_once(ABSPATH . 'wp-admin/includes/class-wp-list-table.php'); } class admin_list_table extends WP_List_Table { public function __construct() { parent::__construct(array( 'singular' => 'Customer', //singular name of the listed records 'plural' => 'Customers', //plural name of the listed records 'ajax' => false, //should this table support ajax? 'screen' => null )); } protected function get_table_name() { global $wpdb; return $wpdb->prefix . "customers"; } public function get_item_data($per_page = 5, $page_number = 1) { global $wpdb; $sql = "SELECT * FROM ". $this->get_table_name(); if (!empty($_REQUEST['orderby'])) { $sql .= ' ORDER BY ' . esc_sql($_REQUEST['orderby']); $sql .= ! empty($_REQUEST['order']) ? ' ' . esc_sql($_REQUEST['order']) : ' ASC'; } $sql .= " LIMIT $per_page"; $sql .= ' OFFSET ' . ($page_number - 1) * $per_page; return $wpdb->get_results($sql, 'ARRAY_A'); } public function delete_item($id) { global $wpdb; $wpdb->delete( $this->get_table_name(), array('ID' => $id), array('%d') ); } public function record_count() { global $wpdb; $sql = "SELECT COUNT(*) FROM ". $this->get_table_name(); return $wpdb->get_var($sql); } /* * 그외 컬럼의 값 */ public function column_default($item, $column_name) { switch ($column_name) { case 'address': case 'city': return $item[$column_name]; default: return print_r($item, true); //Show the whole array for troubleshooting purposes } } /* * cb 컬럼의 값 */ function column_cb($item) { return sprintf( '<input type="checkbox" name="bulk-delete[]" value="%s" />', $item['ID'] ); } /* * name 컬럼의 값 */ function column_name($item) { $delete_nonce = wp_create_nonce('delete_item'); $title = '<strong>' . $item['name'] . '</strong>'; $actions = array( 'delete' => sprintf('<a href="?page=%s&action=%s&customer=%s&_wpnonce=%s">Delete</a>', esc_attr($_REQUEST['page']), 'delete', absint($item['ID']), $delete_nonce) ); return $title . $this->row_actions($actions); } function get_columns() { $columns = array( 'cb' => '<input type="checkbox" />', 'name' => 'Name', 'address' => 'Address', 'city' => 'City' ); return $columns; } public function get_sortable_columns() { $sortable_columns = array( 'name' => array('name', true), 'city' => array('city', true) ); return $sortable_columns; } public function get_bulk_actions() { $actions = array('bulk-delete' => 'Delete'); return $actions; } public function prepare_items() { $this->_column_headers = $this->get_column_info(); $this->process_bulk_action(); $per_page = $this->get_items_per_page('customers_per_page', 5); $current_page = $this->get_pagenum(); $total_items = $this->record_count(); $this->set_pagination_args(array( 'total_items' => $total_items, //WE have to calculate the total number of items 'per_page' => $per_page //WE have to determine how many items to show on a page )); $this->items = $this->get_item_data($per_page, $current_page); } public function process_bulk_action() { if ('delete' === $this->current_action()) { $nonce = esc_attr($_REQUEST['_wpnonce']); if (wp_verify_nonce($nonce, 'delete_item')) { $this->delete_item(absint($_GET['customer'])); } } if ((isset($_POST['action']) && $_POST['action'] == 'bulk-delete') || (isset($_POST['action2']) && $_POST['action2'] == 'bulk-delete')) { $delete_ids = esc_sql($_POST['bulk-delete']); foreach ($delete_ids as $id) { $this->delete_item($id); } } } }