In-Depth WordPress Tutorials for Developers

Welcome to WPShout, a website about WordPress development.
Below, you'll find some of our favorite WordPress development tutorials, news, and resources.
Whether you're just getting started or need a specific WordPress coding tutorial, you'll find we tackle technical topics in an easy-to-understand, friendly way.
You'll find some of our favorite WordPress tutorials below, and new posts most weekdays. Oh, and we're Fred and David—we're the WordPress developers who run this site.
P.S. If you haven't already subscribed for our excellent weekly newsletter, then now's the time. 🙂
Our "Start Here" Guides
These core WordPress development tutorials will get you started on the right foot.
Recently Published
Check out our most recently published WordPress development tutorials, thoughts and advice on working as a WordPress developer, and WordPress development news.
WP Cron in Practice: wp_schedule_event Examples + More
Other Recent Articles
Become a Freelance WordPress Developer: How to Make a Career of It
Understand WordPress Scheduled Tasks: WP Cron Makes Sense
How to Create and Use WordPress User Metadata (User Meta)
Understand PHP Modulo: Tricks with Division Remainders
Links and Quick Guides
Quick Guide: How to Change Your Permalink Settings
When you create a new page or post on your site, WordPress automatically creates a new entity called a "permalink" that directs to your new content. Since search engines use the URLs of your links as a factor to to determine your position in their rankings, making sure they're optimized to reflect your keywords is pretty important. In this post,…
Justin Tadlock Joins WP Tavern
Back in 2007, when I was just coming to terms with WordPress, Justin Tadlock was out at the forefront of what I understood WordPress to be. In the (gosh!) 12 years since, Justin’s stayed busy in the WordPress space, but also done some other things like share on his blog about his small farm.
On the whole, Justin is in my mind one of those people that belongs on a Rushmore of WordPress. He’s just always loomed large, has taught me a lot of what I know, and has always seemed humble and generous while doing it.
All of this is just to explain why I thought it interested and notable enough to share the fact that Justin has stepped into the shoes left behind by Jeff Chandler at WP Tavern. If you don’t follow it, the Tavern has been a prominent voice in WordPress for a long time. It has been bankrolled by Matt Mullenweg for the last (memory fails me, I looked it up) 6 years, and I’m really excited to see what comes next form Sarah Gooding and Justin over there.
Quick Guide: How to Properly Modify JavaScript Files in a Parent Theme
I recently needed to modify a JavaScript file in a WordPress parent theme. The script was doing almost what I wanted, but not quite, so I wanted to make minor changes. In your case, you might want to entirely override a parent theme JavaScript file in your child theme, or even deactivate a parent theme JavaScript file altogether. What Not to…
Keep reading about How to Properly Modify JavaScript Files in a Parent Theme →
Quick Guide: How to Migrate a WordPress Site with the Duplicator Plugin
WordPress has a lot of migration systems. We've had lots of good experiences with All-in-One WP Migration, some people swear by WP Migrate DB Pro, and others are partial to WP-CLI's terminal-based systems. On top of these options, I've recently found a plugin I really like called Duplicator that approaches WordPress migrations in a unique way. Here's a guide on…
Keep reading about How to Migrate a WordPress Site with the Duplicator Plugin →
Install WordPress with a Managed Database on Digital Ocean
Digital Ocean, a popular VPS hosting provider, recently announced a hosted-MySQL platform. The reasons you may want to do use this (vs putting the MySQL instance on the same server as your WordPress wed server) are a little more subtle than I want to get into here, but suffice it to say you’d get better scalability but a possibly more complex setup. For that reason, I’m linking to this tutorial on the topic from Mark Drake.
I’ve got an interest in using this for some syncing of my various development environments. But enough about me.
This tutorial does a few great things, but the most interesting one is that setting up of the database. In many ways, the rest is a fairly common WordPress install guide. The use of Apache (vs Nginx) is one of the aspects of that stuff we could have long debates about, but again I’ll defer that discussion to other venues and opportunities.
Quick Guide: WordPress Facebook Widget: Add FB to Your Sidebar
Many people and businesses are proud of their Facebook page. They want to be able to market all the great reviews, posts, etc that they've earn on Facebook. WordPress does many things for you, so surely it has a pretty easy way to get a Facebook widget. And you looked and it wasn't there. So what do you do? How…
Keep reading about WordPress Facebook Widget: Add FB to Your Sidebar →
Easier Lazy Loading (for Chrome)
So, Chome 76 (or later. But what version of Chrome am I running anyway?) is getting a feature that would have saved me at least a little work on a few client projects. That is, it’s making lazy-loading of images and iframes as easy as:
<img src="image.png" loading="lazy" alt="…" width="200" height="200">
<iframe src="https://example.com" loading="lazy"></iframe>What’s lazy loading? As you might have guessed from the name alone, it’s when a browser that’s not currently showing an image (in the “viewport”, or part of a page it’s showing) doesn’t actually download that image. This means that if you’re on a slow connection, you’ll load each image as you need to see it, rather than it just seeming to take forever to load the page initially. It’s generally regarded as a best practice, but it’s never been easy.
Previously, to add lazy loading of images to a page you’d have to go through and change out the page markup and then load in the img attributes later with some JavaScript. If (or when) this Chrome behavior becomes a standard used on all major browsers, then you’ll just have to add this loading="lazy" line to each image (or iframe) you want lazy loaded.
The “if” I said above it my one source of hesitation here. I don’t know a lot about what the standards bodies internal functioning is, or if this is the standard way that a web standard eventually gets approved. But my (unfounded) nervousness about Google making the HTML that supports them (vs the open web) is the only reason this is anything but unalloyed *great* news to me.
Managing Multiple Sites: WordPress Multisite vs Separate Installations
I was recently working on a client project where I was faced with the question: should we have one WordPress multisite installation, or many “stand alone” WordPress sites? I gave the correct and scapegoat-y answer: “It depends.” And I was right, but if (like me) you weren’t really aware of the intricacies of that trade-off, I recommend reading this little article from Andy over at Beaver Builder.
In short, a lot of people fear WordPress multisite, and with reason. It’s a different way of using WordPress. But it’s a good one for specific scenarios. For example, Multisite is great if you don’t want to update plugins across dozens of sites. But, you also make it much harder for one site owner to choose to use a different plugin for some common functionality.
Anyway, enough of my yammering. Read more from this article. Here’s my favorite bit, on making the choice:
A WordPress Multisite network is a great solution for managing closely-related sites. But let’s be honest – very few of your projects are going to meet that criteria.
You’re probably dealing with multiple WordPress installations spread across at least a handful of different hosting providers. These sites might be running similar themes and plugins, but aside from that, they’re distinct – owned and operated by clients who aren’t associated with each other.
The upside to keeping these sites separated is that it lowers your risk as a site developer and administrator. You can tailor the setup of each site to suit the needs of the client and the needs of whatever hosting provider they’re using. If something goes wrong on one site, it won’t affect the performance of another site.
The downside is that this adds more overhead to your routines. Software updates, troubleshooting, user management, client reporting – these are all administrative duties that take time away from you working on bigger, more valuable tasks.
Signs of the Blogging Apocalypse: Automattic Buys Tumblr
The weirdest piece of email I’ve gotten all month was courtesy of Brian Krogsgard and the Post Status newsletter: Automattic (owner of WordPress.com, Jetpack, Akismet, WooCommerce…) has just bought blogging giant Tumblr.
Tumblr is a site that normal people have heard of, in a way they haven’t heard of WordPress.com, Jetpack, or maybe even WordPress itself. It’s the site whose oddly difficult-to-follow threading format you’ll instantly recognize if you like internet memes. Most visibly, it’s also the site that banned adult content last year, a decision that was covered widely in the news media and has led to, for example, YouTube videos parodying its executives’ decision making that have garnered millions of views.
It turns out Tumblr was owned by Verizon, following a more than $1 billion 2013 acquisition by Yahoo! (now also owned by Verizon). Whether or not the decision on adult content was a mistake, Verizon certainly seems on board that it’s been horribly mismanaging the property, because its top priority is clearly just to get out of the business: it appears to have sold Tumblr to Automattic for $3 million. That’s an absolutely mind-bogglingly low number. $3 million is almost in the range of what a small business could scrape together. That’s Verizon’s asking price. To buy Tumblr.
I don’t know what likely happens from here, and how it changes WordPress’s future. One possible answer is, simply, “it may not change much.” Tumblr itself may be fatally wounded at this point, and as savvy as Matt and Automattic are in some ways, we don’t know if reversing the fortunes of a declining blogging platform is in their wheelhouse. Nor do I think that WordPress itself necessarily becomes massively better or more connected now that Tumblr is owned by the folks who own Jetpack. As with the WordPress Rest API a few years ago: the news feels big—but, big how?
I am also curious what adding Tumblr’s staff of 200 people will do to Automattic’s priorities. There’s a world in which the Tumblr acquisition becomes a costly distraction in terms of WordPress’s progress forward as a software project—not because Automattic runs WordPress, which it doesn’t, but because Matt’s priorities tend to still get done in the absence of a better-functioning governance model for the project.
More than anything, this does seem like a confirmation that we are in some sort of End Times event, at least in the blogging world. But for much higher-quality analysis than that, you should read Brian’s article.
Quick Guide: WordPress Profile Picture without Gravatar
I was recently working on setting up a site for a personal project and was surprised to discover that there was no place in the theme to add a custom picture for my user bio. I figured out what I wanted: to set my WordPress avatar without Gravatar. I'd rather not rely on a service like that if I don't…
Keep reading about WordPress Profile Picture without Gravatar →
An Advisory Board for WordPress
I like the direction that Josepha Haden is pushing WordPress. She’s making strides to put the whole project on an even better trajectory. Toward better collaboration, better effectiveness, more inclusive. It’s not the case that I (as a random person far from the core of most of the projects) know a lot about how it feels to people more involved, but I hope and see signs that those more-involved agree.
It is because of this that I’m cheered by the idea she presents in this proposal of forming an advisory board for WordPress. I think it’s important to balance enthusiasm for a board with the idea that boards and committees are both great at doing things, and great at causing ineffectiveness. But I’m staying optimistic. Part of making sure there’s an attitude and reality of collaboration will be grounded in there being real discussions and formal cross-boundary problem-solving. And making places for that collaboration to happen is a real and important prerequisite to it happening.
If you’re at all interested in this idea, I really encourage you to chime in on the discussion on the post itself. It seems like a reasonably vigorous and quite intelligent discussion. But it’s too currently busy for your voice to register.
(Discovered via the WP Tavern write-up from Sarah Gooding, which is itself quite good.)
Quick Guide: How to Change Your Default Category From “Uncategorized” in WordPress
In this text and video Quick Guide, we'll show you how to change your WordPress default category from "Uncategorized" to something custom! Why You'd Want to Change Your WordPress Default Category Categories are a type of default WordPress taxonomy that helps users organize their posts. You might have noticed that WordPress, by default, automatically categorizes your new posts as "Uncategorized."…
Keep reading about How to Change Your Default Category From “Uncategorized” in WordPress →
Quick Guide: Recover WordPress Password: Get a Password Reset Email
In this Quick Guide, we'll help you get a WordPress password reset email. With that email from your WordPress site, you should be able to recover your WordPress password. It's not a perfect system, but if you're unable to log into a WordPress site because you forgot your password, this should help immensely. If you have access to the email…
Keep reading about Recover WordPress Password: Get a Password Reset Email →
Understand Types of WordPress Caching
This is a solid little article from the folks over at SpinupWP about caching in WordPress. “Caching” is one of the most simply and complicated words, almost simultaneously. The heart of the issue, there there are so many different kinds. A few years back I tried to tease those types of caching apart, but but different takes on the same basic material work better for different people.
Ashley’s article is a lot prettier, more direct, and actionable than mine. I particularly like all the pretty diagrams they’ve included in the article. The core point of all caching, as I see it, is in this quote:
Before we dive into the various caching mechanisms, it’s essential to understand the benefits of caching. Caching plays two major roles:
- It improves application performance. For WordPress sites, this means that your site loads faster.
- It increases application throughput. Meaning, your site can handle more traffic.
What’s more, caching can increase both application performance and throughput without increasing hosting costs. This is because you need far less system resources (CPU & memory) to host a site that has been correctly cached. It really is a win-win strategy (when done correctly).
Quick Guide: Simple WP_Query Example: Using a Shortcode to Display Post Titles
In this video and text Quick Guide, we present a basic use of WP_Query inside a WordPress shortcode, to show the post titles of the five most recently published posts. We've designed this Quick Guide to be a simple intro to using WP_Query in general, as well as to using WP_Query to display post titles and other post data inside…
Keep reading about Simple WP_Query Example: Using a Shortcode to Display Post Titles →
We were on the BoldLife podcast!
We were on the BoldLife podcast. It was a great time. We (well, especially Fred) talked a length about the complex reality of where generous human people meet the weird world of corporate policies. More than that, we talked about what that means when you’re shopping for the best WordPress hosting for your own website. And why talking to the nicest person from one of the those companies is probably a less reliable way of finding good hosting than we are.
We also talked a little about WordCamp Denver, Up and Running, and how Fred, Jesse, and I all went to high school together. Thanks to Jesse and Mike for having us 🙂
150k Small Business Website Teardown 2019
Reviewing the SEO of small business websites.
End-to-end (e2e) testing is a methodology used to test whether the flow of an application is performing as designed from start to finish.
What’s actually happening on the hundreds of thousands of small business websites we hear about? This teardown looks at 150k of those sites, and the answer is it’s a bit of a wild west:
- ~2% of small business websites are marked noindex, which means search engines will not index the site! This rises to 4.4% of websites on Squarespace have the setting, and 2.1% for WordPress.com.
- 25% of all small business websites are missing an H1 tag, which tells search engines what the most important content on the page is. Shout out to Wix this time, with 40% of their sites missing it. WordPress.com still does fairly badly with 24% of sites missing the tag.
- Yelp and other directory sites dominate search for small business terms (such as “best plumber [town]”. Yelp appears in the top five search results for 92% of these searches.
The full report makes for interesting reading. It’s clear there’s still a very, very long way to go in order to reach the holy grail of easy-to-make small business websites, whether that’s on WordPress or somewhere else.
This post first appeared in MasterWP, a weekly newsletter for WordPress professionals.
Quick Guide: How to Change WordPress Password in phpMyAdmin (a cPanel tool)
In this Quick Guide, we'll walk you through how to change a WordPress user's password using phpMyAdmin, a tool found in most webhosting cPanels. To change WordPress passwords from phpMyAdmin is simple (it takes less than a minute front-to-back) and it's a very useful trick to know---one we use at least a couple times every single month in our work…
Keep reading about How to Change WordPress Password in phpMyAdmin (a cPanel tool) →
Should you make an app?
Tom Scott is one of my favorite YouTubers. (I know a lot of nerdy YouTube channels these days.) He is clear, knowledgeable, and a bit like what I’d make on YouTube if I’d started eight years ago and was British.
And since I think that a lot of WordPress folks may either be app-dreamers, or dealing with app-dreamers as clients, I found a great excuse to link to a YouTube channel which is mostly about very-other topics.
The series is a great summary of interviews and conversations about the marketing and other realities of making an app that too rarely succeeds. I think the series is great. It’s not over-optimistic “you can do it!” cheer-leading, but nor is it fatalistic “all apps are garbage” time wasting. There’s a lot more to building an amazing app than a few hours of video (even from someone as concise and clear as Tom) can cover, but so far from my watching it’s a great start to previewing the reality of what a successful app would take. He covers a lot of things–prototyping, validation, technology choices, etc–in enough detail that you’re getting off to a good start.
Here’s the trailer for the (totally free) playlist:
Quick Guide: How to Prevent Browser Caching of a CSS Stylesheet in WordPress
This video and text Quick Guide explains how to prevent browser caching of CSS files in WordPress. The CSS cache busting tricks here will work outside WordPress, too: you'll just need your own method of adding query strings. Why Browsers Cache CSS Stylesheets When a browser caches a CSS stylesheet, what it's doing is getting that stylesheet from the server…
Keep reading about How to Prevent Browser Caching of a CSS Stylesheet in WordPress →