'optionpage', 'plural' => 'optionpages', 'screen' => isset($args['screen']) ? $args['screen'] : null, 'ajax' => false ]); } public function column_default($item, $columnName) { switch ($columnName) { case 'pages': return $item[$columnName]; case 'position': return $item[$columnName]; // case 'menu_type': // return $item[$columnName]; default: return print_r($item, true); } } public function column_title($item) { $actions = [ 'edit' => sprintf('Edit', SubpageEdit::SLUG, $item['ID']), 'delete' => sprintf( '', $_REQUEST['page'], 'delete', $item['ID'], wp_create_nonce($item['ID']) ) ]; // $actions = [ // 'edit' => sprintf('Edit', SubpageEdit::SLUG, $item['ID']), // 'delete' => sprintf( // 'Delete', // $_REQUEST['page'], // 'delete', // $item['ID'], // wp_create_nonce($item['ID']) // ), // ]; return sprintf( '%s%s', SubpageEdit::SLUG, $item['ID'], $item['title'], $this->row_actions($actions) ); } public function column_cb($item) { return sprintf('', $this->_args['singular'], $item['ID']); } public function get_columns() { return [ // 'cb' => '', 'title' => 'Menu Title', 'position' => 'Position', 'pages' => 'Pages', // 'menu_type' => 'Menu type' ]; } protected function get_views() { return [ 'all' => 'All', 'published' => 'Published', 'trashed' => 'Trashed' ]; } public function get_sortable_columns() { return [ 'title' => ['title', false], 'pages' => ['pages', false], 'position' => ['position', true] ]; } public function get_bulk_actions() { return [ // 'delete' => 'Delete' ]; } private function bulkActionDeleteArray() { if ('delete' !== $this->current_action() || !isset($_REQUEST['optionpage']) || !isset($_REQUEST['_wpnonce'])) { return; } list($nonce, $ids) = [$_REQUEST['_wpnonce'], $_REQUEST['optionpage']]; if (!wp_verify_nonce($nonce, 'bulk-' . $this->_args['plural'])) { return; } $ids = Collection::make($ids); $ids->map(function ($id) { return Data::getOptionNamesFromSettingPagesById($id)->all(); })->flatten(1)->map(function ($optionName) { return delete_option($optionName); }); $ids->map(function ($id) { return DB::deleteRowById($id); }); // session_start(); // $_SESSION['aop_pages_deleted'] = true; // $_SESSION['aop_pages_deleted_multiple'] = true; // vardumper($_SESSION); // wp_redirect(SubpageMaster::url()); // exit; // return Plugin::redirectTo(SubpageMaster::url()); //https://example.test/wp-admin/admin.php?page=admin_options_pages_master&_wpnonce=34c8cc7cfa&_wp_http_referer=%2Fwp-admin%2Fadmin.php%3Fpage%3Dadmin_options_pages_master&action=delete&paged=1&optionpage%5B0%5D=33&optionpage%5B1%5D=34&action2=-1 //https://example.test/wp-admin/admin.php?page=admin_options_pages_master&action=delete&optionpage=35&nonce=fb1e3f204d } private function bulkActionDeleteSingle() { if ('delete' !== $this->current_action() || !isset($_REQUEST['optionpage']) || !isset($_REQUEST['nonce'])) { return; } // vardumper($_REQUEST); // list($nonce, $id) = [$_REQUEST['nonce'], $_REQUEST['optionpage']]; // if (!wp_verify_nonce($_REQUEST['nonce'], $id)) { // return; // } // $optionNames = Data::getOptionNamesFromSettingPagesById($id); // $optionNames->map(function ($optionName) { // return delete_option($optionName); // }); // DB::deleteRowById($id); // return Plugin::redirectTo(SubpageMaster::url()); } public function processBulkActions() { $this->bulkActionDeleteArray(); // $this->bulkActionDeleteSingle(); } public function prepare_items() { $recordsPerPage = 20; $this->_column_headers = [ $this->get_columns(), [], $this->get_sortable_columns() ]; $this->processBulkActions(); $data = Data::listTableData()->all(); $usortReorder = function ($a, $b) { $orderby = (!empty($_REQUEST['orderby'])) ? $_REQUEST['orderby'] : 'position'; $order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'asc'; if ($a[$orderby] === $b[$orderby]) { return 0; } if ($order === 'asc') { return ($a[$orderby] < $b[$orderby]) ? -1 : 1; } return ($a[$orderby] > $b[$orderby]) ? -1 : 1; }; usort($data, $usortReorder); $totalItems = count($data); $this->items = array_slice($data, (($this->get_pagenum() - 1) * $recordsPerPage), $recordsPerPage); $this->set_pagination_args([ 'total_items' => $totalItems, 'per_page' => $recordsPerPage, 'total_pages' => ceil($totalItems / $recordsPerPage) ]); } }