Lesson 10: Building Your First Plugin Dashboard
Introduction
In the previous lesson, we created our first WordPress administration menu. Although our plugin now has its own dashboard page, the content is very simple.
Professional plugins do more than display a welcome message. They provide administrators with useful information at a glance, such as plugin status, database health, statistics, and recent activity.
In this lesson, we’ll transform our basic dashboard into a professional-looking administration page by displaying several information cards.
Even though most of the values are placeholders for now, this dashboard establishes the layout we’ll continue enhancing throughout the project.
Learning Objectives
By the end of this lesson, you’ll be able to:
- Build a professional WordPress dashboard page.
- Display plugin information.
- Count database records.
- Use WordPress dashboard styling.
- Prepare the interface for future features.
Why Build a Dashboard First?
As our plugin grows, administrators will need quick access to important information.
Instead of searching through multiple pages, they’ll be able to see everything from one central dashboard.
Later, this page will display:
- Total Auctions
- Active Auctions
- Sold Auctions
- Total Bids
- Pending Transfers
- Escrow Transactions
- Plugin Version
- Database Status
Today’s lesson lays the foundation for that dashboard.
Step 1 – Open the Admin Class
Open:
admin/class-admin.php
We’ll replace the simple welcome page with a more useful dashboard.
Step 2 – Replace dashboard_page()
Replace the existing dashboard_page() method with the following:
/**
* Dashboard page.
*/
public function dashboard_page() {
global $wpdb;
$table = $wpdb->prefix . 'flipnzee_auctions';
$total_auctions = (int) $wpdb->get_var(
"SELECT COUNT(*) FROM {$table}"
);
?>
<div class="wrap">
<h1>Flipnzee Auctions Dashboard</h1>
<p>Welcome to the Flipnzee Auctions administration panel.</p>
<table class="widefat striped">
<thead>
<tr>
<th>Information</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>Plugin Version</td>
<td><?php echo esc_html( FLIPNZEE_AUCTION_VERSION ); ?></td>
</tr>
<tr>
<td>Total Auctions</td>
<td><?php echo esc_html( $total_auctions ); ?></td>
</tr>
<tr>
<td>Database Table</td>
<td><?php echo esc_html( $table ); ?></td>
</tr>
<tr>
<td>Plugin Status</td>
<td>Active</td>
</tr>
</tbody>
</table>
</div>
<?php
}
Understanding the Code
The dashboard retrieves the total number of auctions using:
$wpdb->get_var()
Unlike get_row() or get_results(), this method returns only a single value.
In our case:
SELECT COUNT(*)
returns the number of auction records stored in the database.
Why Use COUNT(*)?
Imagine there are:
Auction 1
Auction 2
Auction 3
Instead of loading all three records, MySQL simply returns:
3
This is much faster and more efficient.
Step 3 – Upload the Plugin
Create a new ZIP.
Upload it.
Replace the existing plugin.
Refresh the Dashboard.
What You Should See
Your dashboard should now display something similar to:
Flipnzee Auctions Dashboard
Plugin Version 1.0.0
Total Auctions 0
Database Table wp_flipnzee_auctions
Plugin Status Active
Because we haven’t created any auctions yet, the total remains zero.
That’s exactly what we expect.
Lesson Summary
In this lesson, we transformed our simple administration page into a functional plugin dashboard.
Although the statistics are currently minimal, we’ve established a reusable layout that will gradually expand as more features are added.
Key Takeaways
- ✓ Use
$wpdb->get_var()to retrieve a single value. - ✓
COUNT(*)efficiently counts database records. - ✓ Dashboards provide administrators with useful information.
- ✓ Build the user interface gradually.
- ✓ Reuse WordPress styling whenever possible.
Common Mistakes
- Loading unnecessary data when only a count is required.
- Forgetting to escape output.
- Mixing business logic with HTML.
- Hardcoding plugin information.
Git Commands Used
git add .
git commit -m "Lesson 10: Build plugin dashboard"
git push
Project Status
✅ Development environment
✅ Plugin skeleton
✅ Plugin installation
✅ Plugin lifecycle
✅ .gitignore
✅ Data architecture
✅ Database table
✅ Auction Manager
✅ Retrieve auction records
✅ WordPress admin menu
✅ Plugin dashboard
⬜ Create first auction
⬜ Auction listing page
⬜ Bid engine
⬜ Escrow workflow
⬜ Website transfer
⬜ Notifications
⬜ Version 1.0
Project Evolution
Earlier in the series, our focus was on backend architecture. Now we’re beginning to expose that functionality through a professional administration interface.
As additional features are developed, this dashboard will evolve into the central control panel for the entire auction marketplace, giving administrators quick access to auctions, bids, transfers, and transaction status.
The GitHub repository will always contain the latest implementation, while these lessons explain the reasoning behind each architectural decision.
Developer’s Notebook
A dashboard is often the first screen administrators see when using a plugin. A clean, informative dashboard creates confidence and reduces the time needed to find important information. Even simple statistics such as plugin version, total records, and database status can be valuable during development and troubleshooting.
Looking Ahead
In Lesson 11, we’ll create our first Add New Auction page. Instead of working directly with database methods, administrators will begin creating auctions through a WordPress form, bringing the plugin one step closer to becoming a fully functional marketplace.




















