Last active
July 23, 2019 17:56
-
-
Save edurodriguesdias/18db59ebd055138669ed0ac82febfcfa to your computer and use it in GitHub Desktop.
TABLE LIST USERS - PLUGIN DEVELOPMENT
This file contains hidden or 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 | |
class Lista_Table extends WP_List_Table | |
{ | |
public $items; | |
function __construct() | |
{ | |
parent::__construct( | |
array( | |
'singular' => 'lb_list_professional', //Singular label | |
'plural' => 'lb_list_professionals', //plural label, also this well be one of the table css class | |
'ajax' => false //We won't support Ajax for this table | |
) | |
); | |
} | |
/** | |
* Add extra markup in the toolbars before or after the list | |
* @param string $which, helps you decide if you add the markup after (bottom) or before (top) the list | |
*/ | |
function extra_tablenav($which) | |
{ | |
if( $which == "top" ){ | |
include LBRASILPREST_PLUGIN_DIR . '/pages/admin/chunks/form_search.php'; | |
} | |
if ($which == "bottom") { | |
//The code that goes after the table is there | |
echo "<small>Licenciamento Brasil ©</small>"; | |
} | |
} | |
/** | |
* Define the columns that are going to be used in the table | |
* @return array $columns, the array of columns to use with the table | |
*/ | |
function get_columns() | |
{ | |
return array( | |
'NAME' => __('NAME'), | |
'CNPJ' => __('CNPJ'), | |
'RESPONSAVEL' => __('RESPONSAVEL'), | |
'ESTADO' => __('ESTADO'), | |
'CIDADE' => __('CIDADE'), | |
); | |
} | |
/** | |
* Decide which columns to activate the sorting functionality on | |
* @return array $sortable, the array of columns that can be sorted by the user | |
*/ | |
public function get_sortable_columns() | |
{ | |
return array(); | |
} | |
/** | |
* Prepare the table with different parameters, pagination, columns and table elements | |
*/ | |
function prepare_items() | |
{ | |
global $wpdb, $_wp_column_headers; | |
$screen = get_current_screen(); | |
/* -- Preparing your query -- */ | |
$query = " | |
SELECT * FROM $wpdb->users AS USR | |
INNER JOIN $wpdb->usermeta AS USRM ON USR.ID = USRM.user_id | |
WHERE USRM.meta_key = 'user_type' AND USRM.meta_value = 'lb_professional' | |
"; | |
/* -- Ordering parameters -- */ | |
$orderby = !empty($_GET["orderby"]) ? $_GET["orderby"] : ''; | |
$order = !empty($_GET["order"]) ? $_GET["order"] : 'ASC'; | |
if (!empty($orderby) & !empty($order)) { | |
$query .= ' ORDER BY ' . $orderby . ' ' . $order; | |
} | |
/* -- Pagination parameters -- */ | |
//Number of elements in your table? | |
$totalitems = $wpdb->query($query); | |
//How many to display per page? | |
$perpage = 10; | |
//Which page is this? | |
$paged = !empty($_GET["paged"]) ? $_GET["paged"] : ''; | |
//Page Number | |
if (empty($paged) || !is_numeric($paged) || $paged <= 0) { | |
$paged = 1; | |
} //How many pages do we have in total? | |
$totalpages = ceil($totalitems / $perpage); //adjust the query to take pagination into account | |
if (!empty($paged) && !empty($perpage)) { | |
$offset = ($paged - 1) * $perpage; | |
$query .= ' LIMIT ' . (int) $offset . ',' . (int) $perpage; | |
} | |
/* -- Register the pagination -- */ | |
$this->set_pagination_args(array( | |
"total_items" => $totalitems, | |
"total_pages" => $totalpages, | |
"per_page" => $perpage, | |
)); | |
//The pagination links are automatically built according to those parameters | |
/* — Register the Columns — */ | |
$columns = $this->get_columns(); | |
$hidden = array(); | |
$sortable = $this->get_sortable_columns(); | |
$this->_column_headers = array($columns, $hidden, $sortable); | |
/* -- Fetch the items -- */ | |
$this->items = $wpdb->get_results($query); | |
} | |
/** | |
* Display the rows of records in the table | |
* @return string, echo the markup of the rows | |
*/ | |
function display_rows() | |
{ | |
//Get the records registered in the prepare_items method | |
$records = $this->items; | |
//Get the columns registered in the get_columns and get_sortable_columns methods | |
list($columns, $hidden) = $this->get_column_info(); | |
$columns = $this->get_columns(); | |
//Loop for each record | |
if (!empty($records)) { | |
foreach ($records as $rec) { | |
echo '<tr id="record_' . $rec->ID . '">'; //Open the line | |
foreach ($columns as $column_name => $column_display_name) { | |
//Style attributes for each col | |
$class = "class='$column_name column-$column_name'"; | |
$style = ""; | |
if (in_array($column_name, $hidden)) $style = ' style="display:none;"'; | |
$attributes = $class . $style; | |
//edit link | |
//Display the cell | |
switch ($column_name) { | |
case "CNPJ": | |
echo '<td ' . $attributes . '>' . (isset(get_user_meta($rec->ID, 'cnpj')[0]) ? get_user_meta($rec->ID, 'cnpj')[0] : 'N/D') | |
. '</td>'; | |
break; | |
case "RESPONSAVEL": | |
echo '<td ' . $attributes . '>' . (isset(get_user_meta($rec->ID, 'holder_name')[0]) ? get_user_meta($rec->ID, 'holder_name')[0] : $rec->display_name) | |
. '</td>'; | |
break; | |
case "CIDADE": | |
echo '<td ' . $attributes . '>' . (isset(get_user_meta($rec->ID, 'city')[0]) ? get_user_meta($rec->ID, 'city')[0] : $rec->display_name) | |
. '</td>'; | |
break; | |
case "ESTADO": | |
echo '<td ' . $attributes . '>' . (isset(get_user_meta($rec->ID, 'state')[0]) ? get_user_meta($rec->ID, 'state')[0] : $rec->display_name) | |
. '</td>'; | |
break; | |
case "NAME": | |
echo '<td ' . $attributes . '>' . (isset(get_user_meta($rec->ID, 'company_name')[0]) ? get_user_meta($rec->ID, 'company_name')[0] : $rec->display_name) | |
. '</td>'; | |
break; | |
} | |
} | |
echo '</tr>'; //Close the line | |
} | |
} | |
} | |
} | |
if (!class_exists('WP_List_Table')) { | |
require_once(ABSPATH . 'wp-admin/includes/class-wp-list-table.php'); | |
} | |
$wp_list_table = new Lista_Table(); | |
$wp_list_table->prepare_items(); | |
?> | |
<div class="wrap"> | |
<h2>Profissionais Cadastrados</h2> | |
<?php | |
//Table of elements | |
$wp_list_table->display(); | |
?> | |
</div> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment