()/column_default()) for LogListTable's own logic to be unit-tested * without a full WP admin bootstrap. */ class WP_List_Table { /** @var list> */ public $items = []; /** @var array{0: array, 1: list, 2: list}|null */ public $_column_headers; /** @var array */ protected $_args; /** @var array */ protected $_pagination_args = []; /** @param array $args */ public function __construct(array $args = []) { $this->_args = $args; } public function get_pagenum(): int { return isset($_GET['paged']) ? max(1, (int) $_GET['paged']) : 1; // phpcs:ignore WordPress.Security.NonceVerification.Recommended } /** @param array $args */ public function set_pagination_args(array $args): void { $this->_pagination_args = $args; } /** @return array */ public function pagination_args(): array { return $this->_pagination_args; } /** @return array */ public function get_columns(): array { return []; } public function single_row($item): void { echo ''; $this->single_row_columns($item); echo ''; } /** @param array $item */ protected function single_row_columns($item): void { foreach (array_keys($this->get_columns()) as $column_name) { $method = 'column_' . $column_name; $value = method_exists($this, $method) ? $this->{$method}($item) : $this->column_default($item, $column_name); printf('%s', $column_name, $value); } } /** @param array $item */ protected function column_default($item, $column_name): string { return ''; } public function no_items(): void { } public function prepare_items(): void { } public function display(): void { } } }