Last active
November 24, 2023 12:08
-
-
Save alexandrtretyakov/759fc3fbc2e8e445accaebcc06360387 to your computer and use it in GitHub Desktop.
К статье Таблицы в админке Wordpress (часть 1) https://tretyakov.net/post/tabliczy-v-adminke-wordpress-chast-1/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
* Plugin Name: Сотрудники организации | |
* Description: Плагин для демонстрации работы класса WP_List_Table | |
* Version: 0.0.1 | |
* Author: Александр Третьяков | |
* Author URI: https://tretyakov.net/ | |
* License: GPLv2 or later | |
* License URI: https://www.gnu.org/licenses/gpl-2.0.html | |
* | |
*/ | |
// Загружаем файл с классом WP_List_Table | |
if ( ! class_exists( 'WP_List_Table' ) ) { | |
require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' ); | |
} | |
// Создаем наш класс, который наследует WP_List_Table | |
class Employees_List_Table extends WP_List_Table { | |
private $table_data; | |
// Создаем колонки нашей таблицы | |
function get_columns() { | |
$columns = array( | |
'cb' => '<input type="checkbox" />', | |
'name' => 'Имя', | |
'department' => 'Отдел', | |
'on_vacation' => 'Сотрудник в отпуске?' | |
); | |
return $columns; | |
} | |
function prepare_items() { | |
$this->table_data = $this->get_table_data(); | |
$columns = $this->get_columns(); | |
$hidden = array(); | |
$sortable = array(); | |
$primary = 'name'; | |
$this->_column_headers = array( $columns, $hidden, $sortable, $primary ); | |
$this->items = $this->table_data; | |
} | |
// Забираем данные из БД | |
private function get_table_data() { | |
global $wpdb; | |
$table = $wpdb->prefix . 'adt_employees_table'; | |
return $wpdb->get_results( | |
"SELECT * from {$table}", | |
ARRAY_A | |
); | |
} | |
function column_default( $item, $column_name ) { | |
switch ( $column_name ) { | |
case 'id': | |
case 'name': | |
case 'department': | |
case 'on_vacation': | |
default: | |
return $item[ $column_name ]; | |
} | |
} | |
function column_cb( $item ) { | |
return sprintf( | |
'<input type="checkbox" name="element[]" value="%s" />', | |
$item['id'] | |
); | |
} | |
} | |
// Добавляем ссылку на плагин в меню админки | |
function my_add_menu_items() { | |
add_menu_page( 'Сотрудники организации', 'Сотрудники организации', 'activate_plugins', 'employees_list_table', 'employees_list_init' ); | |
} | |
add_action( 'admin_menu', 'my_add_menu_items' ); | |
function employees_list_init() { | |
// Создаем экземпляр класса Employees_List_Table | |
$table = new Employees_List_Table(); | |
echo '<div class="wrap"><h2>Список сотрудников</h2>'; | |
// Формируем таблицу | |
$table->prepare_items(); | |
// Выводим таблицу | |
$table->display(); | |
echo '</div>'; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment