Quantcast
Channel: WordPress › Support » Forum: Hacks - Recent Topics
Viewing all articles
Browse latest Browse all 8245

walshie1987 on "Wordpress table from database - Creating Plugin"

$
0
0

I am new to creating wordpress plugins and as a start I'm wanting to simply add a menu to my wordpress admin and then on the page show a table that is based on my database.

I'm using the following code that I found, and although I understand 90% i'm struggling with how I can get my table data from my database into this.

<?php
/*
* Plugin Name: Paulund WP List Table Example
* Description: An example of how to use the WP_List_Table class to display data in your WordPress Admin area
* Plugin URI: http://www.paulund.co.uk
* Author: Paul Underwood
* Author URI: http://www.paulund.co.uk
* Version: 1.0
* License: GPL2
*/

if(is_admin())
{
new Paulund_Wp_List_Table();
}

/**
* Paulund_Wp_List_Table class will create the page to load the table
*/
class Paulund_Wp_List_Table
{
/**
* Constructor will create the menu item
*/
public function __construct()
{
add_action( 'admin_menu', array($this, 'add_menu_example_list_table_page' ));
}

/**
* Menu item will allow us to load the page to display the table
*/
public function add_menu_example_list_table_page()
{
add_menu_page( 'Example List Table', 'Example List Table', 'manage_options', 'example-list-table.php', array($this, 'list_table_page') );
}

/**
* Display the list table page
*
* @return Void
*/
public function list_table_page()
{
$exampleListTable = new Example_List_Table();
$exampleListTable->prepare_items();
?>
<div class="wrap">
<div id="icon-users" class="icon32"></div>
<h2>Example List Table Page</h2>
<?php $exampleListTable->display(); ?>
</div>
<?php
}
}

// WP_List_Table is not loaded automatically so we need to load it in our application
if( ! class_exists( 'WP_List_Table' ) ) {
require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
}

/**
* Create a new table class that will extend the WP_List_Table
*/
class Example_List_Table extends WP_List_Table
{
/**
* Prepare the items for the table to process
*
* @return Void
*/
public function prepare_items()
{
$columns = $this->get_columns();
$hidden = $this->get_hidden_columns();
$sortable = $this->get_sortable_columns();

$data = $this->table_data();
usort( $data, array( &$this, 'sort_data' ) );

$perPage = 2;
$currentPage = $this->get_pagenum();
$totalItems = count($data);

$this->set_pagination_args( array(
'total_items' => $totalItems,
'per_page' => $perPage
) );

$data = array_slice($data,(($currentPage-1)*$perPage),$perPage);

$this->_column_headers = array($columns, $hidden, $sortable);
$this->items = $data;
}

/**
* Override the parent columns method. Defines the columns to use in your listing table
*
* @return Array
*/
public function get_columns()
{
$columns = array(
'id' => 'ID',
'title' => 'Title',
'description' => 'Description',
'director' => 'Director',
);

return $columns;
}

/**
* Define which columns are hidden
*
* @return Array
*/
public function get_hidden_columns()
{
return array();
}

/**
* Define the sortable columns
*
* @return Array
*/
public function get_sortable_columns()
{
return array('title' => array('title', false));
}

/**
* Get the table data
*
* @return Array
*/
private function table_data()
{
$data = array();

$data[] = array(
'id' => 1,
'title' => 'The Shawshank Redemption',
'description' => 'Two imprisoned men bond over a number of years, finding solace and eventual redemption through acts of common decency.',
'director' => 'Frank Darabont',
);

$data[] = array(
'id' => 2,
'title' => 'The Godfather',
'description' => 'The aging patriarch of an organized crime dynasty transfers control of his clandestine empire to his reluctant son.',
'director' => 'Francis Ford Coppola',
);

$data[] = array(
'id' => 3,
'title' => 'The Godfather: Part II',
'description' => 'The early life and career of Vito Corleone in 1920s New York is portrayed while his son, Michael, expands and tightens his grip on his crime syndicate stretching from Lake Tahoe, Nevada to pre-revolution 1958 Cuba.',
'director' => 'Francis Ford Coppola',

);

return $data;
}

/**
* Define what data to show on each column of the table
*
* @param Array $item Data
* @param String $column_name - Current column name
*
* @return Mixed
*/
public function column_default( $item, $column_name )
{
switch( $column_name ) {
case 'id':
case 'title':
case 'description':

case 'director':

return $item[ $column_name ];

default:
return print_r( $item, true ) ;
}
}

/**
* Allows you to sort the data by the variables set in the $_GET
*
* @return Mixed
*/
private function sort_data( $a, $b )
{
// Set defaults
$orderby = 'title';
$order = 'asc';

// If orderby is set, use this as the sort column
if(!empty($_GET['orderby']))
{
$orderby = $_GET['orderby'];
}

// If order is set use this as the order
if(!empty($_GET['order']))
{
$order = $_GET['order'];
}

$result = strcmp( $a[$orderby], $b[$orderby] );

if($order === 'asc')
{
return $result;
}

return -$result;
}
}
?>

What I tried doing as a test was the following under private function table_data(), but I had no success, just a blank page:

global $wpdb;
$results= $wpdb->get_results( $wpdb->prepare("SELECT * FROM wp_terms") );

 foreach ($results as $result) {
    $data[] = array(
    'id' => $results['term_id'],
    'title' => $results['name'],
    'description' => $results['slug'],
    'director' => $results['term_group'],
    );

return $data;

}

Could anyone point my in the right direction?

Cheers Chris


Viewing all articles
Browse latest Browse all 8245

Trending Articles