⏲️ Estimated reading time: 10 min
Admin Inspirational Quotes Dashboard Widget
Enhance your WordPress admin area with daily motivation! Learn how to create a custom dashboard widget that displays random inspirational quotes, complete with timer, pause, and navigation buttons.
How to Create an Inspirational Quotes Widget for Your WordPress Dashboard. Adding a touch of inspiration to your WordPress admin panel is easier than you think. Whether you’re developing for yourself or your clients, a motivational quote can go a long way toward starting the day positively. In this tutorial, you’ll learn how to build a fully functional WordPress plugin that injects random inspirational quotes into your dashboard complete with a timer, pause/resume feature, and navigation buttons.
🧩 Plugin Overview
This plugin is named Admin Quote Dashboard Widget and provides:
- A random inspirational quote from a list.
- Automatic cycling every 10 seconds.
- Previous and next buttons for manual control.
- A pause/resume feature for stopping the rotation.
- Optional customization space for settings.
All of this runs natively in the WordPress admin dashboard, offering both functionality and flair.

🔧 Full Plugin Code
Here’s the complete code you need to add this feature:
<?php
/**
* Plugin Name: Admin Quotes Dashboard Widget
* Description: Displays random inspirational quotes in the WordPress admin dashboard
* Version: 1.0
* Author: Your Name
*/
function register_quote_dashboard_widget() {
wp_add_dashboard_widget(
'quote_dashboard_widget',
'Inspirational Quotes',
'display_quote_dashboard_widget',
'control_quote_dashboard_widget'
);
}
add_action('wp_dashboard_setup', 'register_quote_dashboard_widget');
This initializes your plugin and hooks it into the dashboard using wp_dashboard_setup
.
💬 Display Functionality
The core functionality of showing quotes is handled by:
function display_quote_dashboard_widget() {
// Our quotes array
$quotes = array(
array('text' => 'The only way to do great work is to love what you do.', 'author' => 'Steve Jobs'),
array('text' => 'Life is what happens when you\'re busy making other plans.', 'author' => 'John Lennon'),
array('text' => 'You can never cross the ocean until you have the courage to lose sight of the shore.', 'author' => 'Christopher Columbus')
);
$random_quote = $quotes[array_rand($quotes)];
This snippet selects a random quote each time the page loads.
🎨 Styling the Widget
The CSS ensures your quote block looks clean and professional:
<style>
#quote-widget-container {
padding: 10px;
}
.quote-text {
font-size: 14px;
line-height: 1.5;
margin-bottom: 10px;
font-style: italic;
}
.quote-author {
text-align: right;
font-weight: bold;
margin-bottom: 15px;
}
.quote-timer {
font-size: 12px;
color: #666;
margin-bottom: 10px;
}
.quote-controls {
display: flex;
gap: 5px;
}
</style>
This is embedded inline within the dashboard, ensuring styles don’t leak sitewide.

⚙️ JavaScript Interactivity
Here’s where the real magic happens. The JavaScript inside the widget allows users to interact with the quotes dynamically:
- Timer countdown every second.
- Next/Previous navigation.
- Pause/Resume control.
The structure is clean and fully encapsulated using jQuery. The current index is randomly initialized, and users can scroll through quotes at will.
<script>
(function($) {
const quotes = <?php echo json_encode($quotes); ?>;
let currentIndex = <?php echo array_rand($quotes); ?>;
let countdown = 10;
let isPaused = false;
let timer;
startTimer();
$('#quote-next').on('click', showNextQuote);
$('#quote-prev').on('click', showPreviousQuote);
$('#quote-pause').on('click', togglePause);
function displayQuote(index) {
$('.quote-text').text(quotes[index].text);
$('.quote-author').text('- ' + quotes[index].author);
resetCountdown();
}
function getRandomIndex() {
let newIndex;
do {
newIndex = Math.floor(Math.random() * quotes.length);
} while (newIndex === currentIndex && quotes.length > 1);
return newIndex;
}
function showNextQuote() {
currentIndex = (currentIndex + 1) % quotes.length;
displayQuote(currentIndex);
}
function showPreviousQuote() {
currentIndex = (currentIndex - 1 + quotes.length) % quotes.length;
displayQuote(currentIndex);
}
function showRandomQuote() {
currentIndex = getRandomIndex();
displayQuote(currentIndex);
}
function startTimer() {
timer = setInterval(() => {
if (!isPaused) {
countdown--;
$('#quote-countdown').text(countdown);
if (countdown <= 0) {
showRandomQuote();
}
}
}, 1000);
}
function resetCountdown() {
countdown = 10;
$('#quote-countdown').text(countdown);
}
function togglePause() {
isPaused = !isPaused;
$('#quote-pause').text(isPaused ? "Resume" : "Pause");
if (!isPaused) {
resetCountdown();
}
}
})(jQuery);
</script>
🧪 Adding More Quotes
To maximize variety, you can expand the $quotes
array to include up to 100 or more quotes. Format each entry like this:
array('text' => 'Your inspirational quote.', 'author' => 'Author Name'),
This allows flexibility and content rotation without modifying the core logic.
🔧 Optional Control Settings
Although the control_quote_dashboard_widget()
function is currently minimal, it’s a great place to insert a settings form in the future ideal for enabling/disabling the widget or adjusting the timer.
function control_quote_dashboard_widget() {
echo '<p>Widget settings would appear here.</p>';
}
This placeholder keeps the code ready for expansion.
Add this full code to your theme’s functions.php
file or create a custom plugin:
<?php
/**
* Plugin Name: Admin Quotes Dashboard Widget
* Description: Displays random inspirational quotes in the WordPress admin dashboard
* Version: 1.0
* Author: HelpZone
*/
function register_quote_dashboard_widget() {
wp_add_dashboard_widget(
'quote_dashboard_widget', // Widget slug
'Inspirational Quotes', // Title
'display_quote_dashboard_widget', // Display function
'control_quote_dashboard_widget' // Control function (optional)
);
}
add_action('wp_dashboard_setup', 'register_quote_dashboard_widget');
function display_quote_dashboard_widget() {
// Our quotes array
$quotes = array(
array('text' => 'The only way to do great work is to love what you do.', 'author' => 'Steve Jobs'),
array('text' => 'Life is what happens when you\'re busy making other plans.', 'author' => 'John Lennon'),
// Add all 100 quotes here (shortened for example)
array('text' => 'You can never cross the ocean until you have the courage to lose sight of the shore.', 'author' => 'Christopher Columbus')
);
// Get a random quote
$random_quote = $quotes[array_rand($quotes)];
?>
<div id="quote-widget-container">
<div class="quote-text"><?php echo esc_html($random_quote['text']); ?></div>
<div class="quote-author">- <?php echo esc_html($random_quote['author']); ?></div>
<div class="quote-timer">Next quote in: <span id="quote-countdown">10</span> seconds</div>
<div class="quote-controls">
<button class="button" id="quote-prev">Previous</button>
<button class="button" id="quote-next">Next</button>
<button class="button" id="quote-pause">Pause</button>
</div>
</div>
<style>
#quote-widget-container {
padding: 10px;
}
.quote-text {
font-size: 14px;
line-height: 1.5;
margin-bottom: 10px;
font-style: italic;
}
.quote-author {
text-align: right;
font-weight: bold;
margin-bottom: 15px;
}
.quote-timer {
font-size: 12px;
color: #666;
margin-bottom: 10px;
}
.quote-controls {
display: flex;
gap: 5px;
}
</style>
<script>
(function($) {
// Our quotes data
const quotes = <?php echo json_encode($quotes); ?>;
let currentIndex = <?php echo array_rand($quotes); ?>;
let countdown = 10;
let isPaused = false;
let timer;
// Initialize
startTimer();
// Event listeners
$('#quote-next').on('click', showNextQuote);
$('#quote-prev').on('click', showPreviousQuote);
$('#quote-pause').on('click', togglePause);
// Functions
function displayQuote(index) {
$('.quote-text').text(quotes[index].text);
$('.quote-author').text('- ' + quotes[index].author);
resetCountdown();
}
function getRandomIndex() {
let newIndex;
do {
newIndex = Math.floor(Math.random() * quotes.length);
} while (newIndex === currentIndex && quotes.length > 1);
return newIndex;
}
function showNextQuote() {
currentIndex = (currentIndex + 1) % quotes.length;
displayQuote(currentIndex);
}
function showPreviousQuote() {
currentIndex = (currentIndex - 1 + quotes.length) % quotes.length;
displayQuote(currentIndex);
}
function showRandomQuote() {
currentIndex = getRandomIndex();
displayQuote(currentIndex);
}
function startTimer() {
timer = setInterval(() => {
if (!isPaused) {
countdown--;
$('#quote-countdown').text(countdown);
if (countdown <= 0) {
showRandomQuote();
}
}
}, 1000);
}
function resetCountdown() {
countdown = 10;
$('#quote-countdown').text(countdown);
}
function togglePause() {
isPaused = !isPaused;
$('#quote-pause').text(isPaused ? "Resume" : "Pause");
if (!isPaused) {
resetCountdown();
}
}
})(jQuery);
</script>
<?php
}
function control_quote_dashboard_widget() {
// Optional control settings could go here
echo '<p>Widget settings would appear here.</p>';
}
Conclusion
<?php
/**
* Plugin Name: Admin Quotes Dashboard Widget
* Description: Displays random inspirational quotes by Steve Jobs in the WordPress admin dashboard
* Version: 1.1
* Author: Your Name
*/
function register_quote_dashboard_widget() {
wp_add_dashboard_widget(
'quote_dashboard_widget',
'Inspirational Quotes by Steve Jobs',
'display_quote_dashboard_widget',
'control_quote_dashboard_widget'
);
}
add_action('wp_dashboard_setup', 'register_quote_dashboard_widget');
function display_quote_dashboard_widget() {
$quotes = array(
array('text' => 'The only way to do great work is to love what you do.', 'author' => 'Steve Jobs'),
array('text' => 'Innovation distinguishes between a leader and a follower.', 'author' => 'Steve Jobs'),
array('text' => 'Your time is limited, so don’t waste it living someone else’s life.', 'author' => 'Steve Jobs'),
array('text' => 'Stay hungry, stay foolish.', 'author' => 'Steve Jobs'),
array('text' => 'Have the courage to follow your heart and intuition. They somehow already know what you truly want to become.', 'author' => 'Steve Jobs'),
array('text' => 'Sometimes life is going to hit you in the head with a brick. Don’t lose faith.', 'author' => 'Steve Jobs'),
array('text' => 'Design is not just what it looks like and feels like. Design is how it works.', 'author' => 'Steve Jobs'),
array('text' => 'Remembering that you are going to die is the best way I know to avoid the trap of thinking you have something to lose.', 'author' => 'Steve Jobs'),
array('text' => 'I’m convinced that about half of what separates successful entrepreneurs from the non-successful ones is pure perseverance.', 'author' => 'Steve Jobs'),
array('text' => 'Things don’t have to change the world to be important.', 'author' => 'Steve Jobs')
);
$random_quote = $quotes[array_rand($quotes)];
?>
<div id="quote-widget-container">
<div class="quote-text"><?php echo esc_html($random_quote['text']); ?></div>
<div class="quote-author">- <?php echo esc_html($random_quote['author']); ?></div>
<div class="quote-timer">Next quote in: <span id="quote-countdown">10</span> seconds</div>
<div class="quote-controls">
<button class="button" id="quote-prev">Previous</button>
<button class="button" id="quote-next">Next</button>
<button class="button" id="quote-pause">Pause</button>
</div>
</div>
<style>
#quote-widget-container {
padding: 10px;
}
.quote-text {
font-size: 14px;
line-height: 1.5;
margin-bottom: 10px;
font-style: italic;
}
.quote-author {
text-align: right;
font-weight: bold;
margin-bottom: 15px;
}
.quote-timer {
font-size: 12px;
color: #666;
margin-bottom: 10px;
}
.quote-controls {
display: flex;
gap: 5px;
}
</style>
<script>
(function($) {
const quotes = <?php echo json_encode($quotes); ?>;
let currentIndex = <?php echo array_rand($quotes); ?>;
let countdown = 10;
let isPaused = false;
let timer;
startTimer();
$('#quote-next').on('click', showNextQuote);
$('#quote-prev').on('click', showPreviousQuote);
$('#quote-pause').on('click', togglePause);
function displayQuote(index) {
$('.quote-text').text(quotes[index].text);
$('.quote-author').text('- ' + quotes[index].author);
resetCountdown();
}
function getRandomIndex() {
let newIndex;
do {
newIndex = Math.floor(Math.random() * quotes.length);
} while (newIndex === currentIndex && quotes.length > 1);
return newIndex;
}
function showNextQuote() {
currentIndex = (currentIndex + 1) % quotes.length;
displayQuote(currentIndex);
}
function showPreviousQuote() {
currentIndex = (currentIndex - 1 + quotes.length) % quotes.length;
displayQuote(currentIndex);
}
function showRandomQuote() {
currentIndex = getRandomIndex();
displayQuote(currentIndex);
}
function startTimer() {
timer = setInterval(() => {
if (!isPaused) {
countdown--;
$('#quote-countdown').text(countdown);
if (countdown <= 0) {
showRandomQuote();
}
}
}, 1000);
}
function resetCountdown() {
countdown = 10;
$('#quote-countdown').text(countdown);
}
function togglePause() {
isPaused = !isPaused;
$('#quote-pause').text(isPaused ? "Resume" : "Pause");
if (!isPaused) {
resetCountdown();
}
}
})(jQuery);
</script>
<?php
}
function control_quote_dashboard_widget() {
echo '<p>Widget settings would appear here.</p>';
}
📌 Summary
The Admin Quote Dashboard Widget is a lightweight, easy-to-install plugin that enhances your WordPress backend experience. With simple UI elements and motivational content, it not only improves UX but brings a bit of joy into daily administrative tasks.
You can use this as a standalone plugin or build it into larger dashboard customization projects.
🔔For more tutorials like this, consider subscribing to our blog.
📩 Do you have questions or suggestions? Leave a comment or contact us!
🏷️ Tags: WordPress plugin, dashboard widget, admin customization, quote plugin, inspirational widget, random quotes, wp_dashboard_setup, jQuery WordPress, plugin development, UI enhancement
📢 Hashtags: #WordPressPlugin, #WPAdmin, #DashboardWidget, #MotivationMonday, #WebDevelopment, #PluginTutorial, #QuoteOfTheDay, #CodingLife, #DevInspiration, #WordPressTips
Final Thoughts
By incorporating this inspirational quote widget into your admin dashboard, you inject motivation into your workflow and offer a small boost to everyone managing your site. With room to grow and easy customization, it’s a perfect example of how simple code can make a big impact.
Only logged-in users can submit reports.
Discover more from HelpZone
Subscribe to get the latest posts sent to your email.