Skip to content

Instantly share code, notes, and snippets.

@edurodriguesdias
Last active July 23, 2019 17:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save edurodriguesdias/18db59ebd055138669ed0ac82febfcfa to your computer and use it in GitHub Desktop.
Save edurodriguesdias/18db59ebd055138669ed0ac82febfcfa to your computer and use it in GitHub Desktop.
TABLE LIST USERS - PLUGIN DEVELOPMENT
<?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 &copy;</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