'', 'singular' => '', 'ajax' => false )); $screen = get_current_screen(); if (isset($screen->id)) { //workaround for CSS download add_filter("manage_{$screen->id}_columns", array(&$this, 'get_columns'), 0); } if (!$args['plural']) $args['plural'] = $screen->base; $args['plural'] = sanitize_key($args['plural']); $args['singular'] = sanitize_key($args['singular']); $this->_args = $args; if ($args['ajax']) { // wp_enqueue_script( 'list-table' ); add_action('admin_footer', array(&$this, '_js_vars')); } } function ajax_user_can() { die('function WP_List_Table::ajax_user_can() must be over-ridden in a sub-class.'); } function prepare_items() { die('function WP_List_Table::prepare_items() must be over-ridden in a sub-class.'); } function set_pagination_args($args) { $args = wp_parse_args($args, array( 'total_items' => 0, 'total_pages' => 0, 'per_page' => 0, )); if (!$args['total_pages'] && $args['per_page'] > 0) $args['total_pages'] = ceil($args['total_items'] / $args['per_page']); // redirect if page number is invalid and headers are not already sent if (!headers_sent() && (!defined('DOING_AJAX') || !DOING_AJAX ) && $args['total_pages'] > 0 && $this->get_pagenum() > $args['total_pages']) { wp_redirect(add_query_arg('paged', $args['total_pages'])); exit; } $this->_pagination_args = $args; } function get_pagination_arg($key) { if ('page' == $key) return $this->get_pagenum(); if (isset($this->_pagination_args[$key])) return $this->_pagination_args[$key]; } function has_items() { return !empty($this->items); } function no_items() { _e('No items found.'); } function search_box($text, $input_id) { if (empty($_REQUEST['s']) && !$this->has_items()) return; $input_id = $input_id . '-search-input'; if (!empty($_REQUEST['orderby'])) echo ''; if (!empty($_REQUEST['order'])) echo ''; ?> get_views(); $views = apply_filters('views_' . $screen->id, $views); if (empty($views)) return; echo ""; } function get_bulk_actions() { return array(); } function bulk_actions() { $screen = get_current_screen(); if (is_null($this->_actions)) { $no_new_actions = $this->_actions = $this->get_bulk_actions(); // This filter can currently only be used to remove actions. $this->_actions = apply_filters('bulk_actions-' . $screen->id, $this->_actions); $this->_actions = array_intersect_assoc($this->_actions, $no_new_actions); $two = ''; } else { $two = '2'; } if (empty($this->_actions)) return; echo "\n"; submit_button(__('Apply'), 'button-secondary action', false, false, array('id' => "doaction$two")); echo "\n"; } function current_action() { if (isset($_REQUEST['action']) && -1 != $_REQUEST['action']) return $_REQUEST['action']; if (isset($_REQUEST['action2']) && -1 != $_REQUEST['action2']) return $_REQUEST['action2']; return false; } function row_actions($actions, $always_visible = false) { $action_count = count($actions); $i = 0; if (!$action_count) return ''; $out = '
'; foreach ($actions as $action => $link) { ++$i; ( $i == $action_count ) ? $sep = '' : $sep = ' | '; $out .= "$link$sep"; } $out .= '
'; return $out; } function months_dropdown($post_type) { global $wpdb, $wp_locale; $months = $wpdb->get_results($wpdb->prepare(" SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month FROM $wpdb->posts WHERE post_type = %s ORDER BY post_date DESC ", $post_type)); $month_count = count($months); if (!$month_count || ( 1 == $month_count && 0 == $months[0]->month )) return; $m = isset($_GET['m']) ? (int) $_GET['m'] : 0; ?> __('List View'), 'excerpt' => __('Excerpt View') ); ?>
$title) { $class = ( $current_mode == $mode ) ? 'class="current"' : ''; echo "$title\n"; } ?>
'; echo "" . number_format_i18n(get_comments_number()) . ""; if ($pending_comments) echo ''; } function get_pagenum() { $pagenum = isset($_REQUEST['paged']) ? absint($_REQUEST['paged']) : 0; if (isset($this->_pagination_args['total_pages']) && $pagenum > $this->_pagination_args['total_pages']) $pagenum = $this->_pagination_args['total_pages']; return max(1, $pagenum); } function get_items_per_page($option, $default = 20) { $per_page = (int) get_user_option($option); if (empty($per_page) || $per_page < 1) $per_page = $default; return (int) apply_filters($option, $per_page); } function pagination($which) { if (empty($this->_pagination_args)) return; extract($this->_pagination_args); $output = '' . sprintf(_n('1 item', '%s items', $total_items), number_format_i18n($total_items)) . ''; $current = $this->get_pagenum(); $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $current_url = remove_query_arg(array('hotkeys_highlight_last', 'hotkeys_highlight_first'), $current_url); $page_links = array(); $disable_first = $disable_last = ''; if ($current == 1) $disable_first = ' disabled'; if ($current == $total_pages) $disable_last = ' disabled'; $page_links[] = sprintf("%s", 'first-page' . $disable_first, esc_attr__('Go to the first page'), esc_url(remove_query_arg('paged', $current_url)), '«' ); $page_links[] = sprintf("%s", 'prev-page' . $disable_first, esc_attr__('Go to the previous page'), esc_url(add_query_arg('paged', max(1, $current - 1), $current_url)), '‹' ); if ('bottom' == $which) $html_current_page = $current; else $html_current_page = sprintf("", esc_attr__('Current page'), esc_attr('paged'), $current, strlen($total_pages) ); $html_total_pages = sprintf("%s", number_format_i18n($total_pages)); $page_links[] = '' . sprintf(_x('%1$s of %2$s', 'paging'), $html_current_page, $html_total_pages) . ''; $page_links[] = sprintf("%s", 'next-page' . $disable_last, esc_attr__('Go to the next page'), esc_url(add_query_arg('paged', min($total_pages, $current + 1), $current_url)), '›' ); $page_links[] = sprintf("%s", 'last-page' . $disable_last, esc_attr__('Go to the last page'), esc_url(add_query_arg('paged', $total_pages, $current_url)), '»' ); $output .= "\n" . join("\n", $page_links) . ''; if ($total_pages) $page_class = $total_pages < 2 ? ' one-page' : ''; else $page_class = ' no-pages'; $this->_pagination = "
$output
"; echo $this->_pagination; } function get_columns() { die('function WP_List_Table::get_columns() must be over-ridden in a sub-class.'); } function get_sortable_columns() { return array(); } function get_column_info() { if (isset($this->_column_headers)) return $this->_column_headers; $screen = get_current_screen(); $columns = get_column_headers($screen); $hidden = get_hidden_columns($screen); $_sortable = apply_filters("manage_{$screen->id}_sortable_columns", $this->get_sortable_columns()); $sortable = array(); foreach ($_sortable as $id => $data) { if (empty($data)) continue; $data = (array) $data; if (!isset($data[1])) $data[1] = false; $sortable[$id] = $data; } $this->_column_headers = array($columns, $hidden, $sortable); return $this->_column_headers; } function get_column_count() { list ( $columns, $hidden ) = $this->get_column_info(); $hidden = array_intersect(array_keys($columns), array_filter($hidden)); return count($columns) - count($hidden); } function print_column_headers($with_id = true) { $screen = get_current_screen(); list( $columns, $hidden, $sortable ) = $this->get_column_info(); $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $current_url = remove_query_arg('paged', $current_url); if (isset($_GET['orderby'])) $current_orderby = sanitize_text_field($_GET['orderby']); else $current_orderby = ''; if (isset($_GET['order']) && 'desc' == sanitize_text_field($_GET['order'])) $current_order = 'desc'; else $current_order = 'asc'; foreach ($columns as $column_key => $column_display_name) { $class = array('manage-column', "column-$column_key"); $style = ''; if (in_array($column_key, $hidden)) $style = 'display:none;'; $style = ' style="' . $style . '"'; if ('cb' == $column_key) $class[] = 'check-column'; elseif (in_array($column_key, array('posts', 'comments', 'links'))) $class[] = 'num'; if (isset($sortable[$column_key])) { list( $orderby, $desc_first ) = $sortable[$column_key]; if ($current_orderby == $orderby) { $order = 'asc' == $current_order ? 'desc' : 'asc'; $class[] = 'sorted'; $class[] = $current_order; } else { $order = $desc_first ? 'desc' : 'asc'; $class[] = 'sortable'; $class[] = $desc_first ? 'asc' : 'desc'; } $column_display_name = '' . $column_display_name . ''; } $id = $with_id ? "id='$column_key'" : ''; if (!empty($class)) $class = "class='" . join(' ', $class) . "'"; echo "$column_display_name"; } } function display() { extract($this->_args); $this->display_tablenav('top'); ?> print_column_headers(); ?> print_column_headers(false); ?> > display_rows_or_placeholder(); ?>
display_tablenav('bottom'); } function get_table_classes() { return array('widefat', 'fixed', $this->_args['plural']); } function display_tablenav($which) { if ('top' == $which) wp_nonce_field('bulk-' . $this->_args['plural']); ?>
bulk_actions($which); ?>
extra_tablenav($which); $this->pagination($which); ?>
has_items()) { $this->display_rows(); } else { list( $columns, $hidden ) = $this->get_column_info(); echo ''; $this->no_items(); echo ''; } } function display_rows() { foreach ($this->items as $item) $this->single_row($item); } function single_row($item) { static $row_class = ''; $row_class = ( $row_class == '' ? ' class="alternate"' : '' ); echo ''; echo $this->single_row_columns($item); echo ''; } function single_row_columns($item) { list( $columns, $hidden ) = $this->get_column_info(); foreach ($columns as $column_name => $column_display_name) { $class = "class='$column_name column-$column_name'"; $style = ''; if (in_array($column_name, $hidden)) $style = ' style="display:none;"'; $attributes = "$class$style"; if ('cb' == $column_name) { echo ''; echo $this->column_cb($item); echo ''; } elseif (method_exists($this, 'column_' . $column_name)) { echo ""; echo call_user_func(array(&$this, 'column_' . $column_name), $item); echo ""; } else { echo ""; echo $this->column_default($item, $column_name); echo ""; } } } function ajax_response() { $this->prepare_items(); extract($this->_args); extract($this->_pagination_args); ob_start(); if (!empty($_REQUEST['no_placeholder'])) $this->display_rows(); else $this->display_rows_or_placeholder(); $rows = ob_get_clean(); $response = array('rows' => $rows); if (isset($total_items)) $response['total_items_i18n'] = sprintf(_n('1 item', '%s items', $total_items), number_format_i18n($total_items)); if (isset($total_pages)) { $response['total_pages'] = $total_pages; $response['total_pages_i18n'] = number_format_i18n($total_pages); } die(json_encode($response)); } function _js_vars() { $current_screen = get_current_screen(); $args = array( 'class' => get_class($this), 'screen' => array( 'id' => $current_screen->id, 'base' => $current_screen->base, ) ); printf("\n", json_encode($args)); } }