Where Older Books and Tutorials Are Outdated
|
This content was generated with the assistance of AI and should be verified against the official documentation before being relied on in production. This sub-section’s WordPress bibliography lists the reference material consulted while preparing these pages. |
WordPress keeps old code working for a long time, so outdated advice rarely fails loudly: a post type registered
without show_in_rest still saves posts, a 777 directory still accepts uploads, and a sitemap ping still returns a
response. This page collects, in one place, the statements in older books and tutorials that the rest of this section
corrects, with the version where the behaviour changed, the page that covers it in depth and the official source. It
is a reference to check advice against before following it, not a substitute for the pages it links.
The page was written against WordPress 7.1.3 (released 2026-10-06), the release the examples in this section were
tested on; WordPress 7.1.4 (released 2026-10-28) is the current security release and should be used in production, and
WordPress 7.2 is in beta, planned for 2026-12-08. Other versions referred to: PHP 7.4 minimum and 8.3+ recommended,
theme.json version 3, Gutenberg 24.2.0, @wordpress/scripts 37.0.0, @wordpress/create-block 5.0.0,
@wordpress/env 12.0.0, @wordpress/interactivity 8.0.0, WordPress Coding Standards 3.4.1 and WP-CLI 2.12.0.
Everything was checked on 2026-10-28.
The books compared
Three books published in 2024 were compared with the official documentation. They remain useful for their operational advice, and much of what they say about writing, publishing, vetting plugins, hosting choices and incident response still holds. Where they disagree with the official documentation, the official documentation wins. The tables below refer to them by short title:
| Short title | Book | Targets and scope |
|---|---|---|
All-in-One |
Lisa Sabin-Wilson, WordPress All-in-One For Dummies, 5th edition (Wiley, 2024) |
WordPress 6.3 to 6.4; site owners and administrators; block editor and block themes from the user’s side; no plugin, theme or block development |
Pro WordPress |
Sivaraj Selvaraj, Pro WordPress: Mastering the Techniques for Building, Securing and Scaling Websites (Apress, 2024) |
No version stated (6.2 is the latest named); classic themes only; hosting, security, performance, SEO, Multisite and
scaling; no block themes, |
Ultimate Handbook |
Daniel Bisett and Tricia Elizabeth Ulberg, Ultimate WordPress Handbook (Orange Education/AVA, 2024) |
WordPress 6.4 to 6.6 and Twenty Twenty-Four; Customizer-centred design with a commercial theme and builder; troubleshooting runbooks, SEO, analytics and privacy |
Rows marked Tutorials come from the wider body of blog posts, snippets and handbooks written for WordPress 5.x and early 6.x. None of the three books covers what arrived between 6.5 and 7.1 (Font Library, Block Bindings, the Interactivity API, Script Modules, section styles, pattern overrides, PHP-only blocks, the Abilities API, the AI Client, responsive styles, the always-iframed editor); for those the handbooks, the Make WordPress Core field guides and developer notes, and the WordPress Developer Blog are the only sources.
Platform and versions
| Older claim | Current state | Since | Covered in | Official source |
|---|---|---|---|---|
Pro WordPress: a version X.Y.Z is major.minor.patch, so 6.9 to 7.0 is the big step |
X.Y together is the major release and Z the maintenance release; 6.9 to 7.0 is an ordinary major update, and
|
Always |
||
Tutorials: WordPress ships three major releases a year |
A plan, not a rule: 2025 had two (6.8 and 6.9), and the 2026 roadmap plans three with a feature freeze one month before each |
2025 |
||
Tutorials written during the 7.0 beta: real-time collaborative editing is part of 7.0 |
Removed from 7.0 before release and absent from 7.1; a reworked approach has no release date |
7.0 |
Make WordPress Core: Real-time collaboration removed from 7.0 |
|
All-in-One: PHP 7.4+, MySQL 5.7+ and MariaDB 10.4+ are the baseline |
PHP 7.4 is still the minimum (since 7.0), but 8.3+ is recommended (8.4+ in the Hosting Handbook); MySQL 5.7 and MariaDB 10.4 are end-of-life, and the recommendation is MySQL 8.4 LTS or MariaDB 10.11 or later |
7.0 |
||
Ultimate Handbook: most themes require PHP 8.2 or later |
Each theme declares its own floor in |
5.5 |
||
Pro WordPress: core has built-in caching and CSS/JavaScript minification |
Core has no page cache, no persistent object cache and no front-end concatenation or minification; |
Always |
||
Pro WordPress: core includes two-factor authentication |
Core has none; it comes from a plugin (Two Factor is the canonical one), single sign-on or passkeys through a plugin |
Always |
||
Tutorials: 7.0 brings AI features to every site |
7.0 added the AI Client and Settings > Connectors, but no provider is bundled; provider plugins are separate, and the Secrets API for stored credentials is planned for 7.2 |
7.0 |
Make WordPress Core: Introducing the AI Client in WordPress 7.0 |
Installation and hosting
| Older claim | Current state | Since | Covered in | Official source |
|---|---|---|---|---|
All-in-One: |
The shipped sample has no closing tag, the PHP convention for code-only files; a stray byte after |
Always |
||
All-in-One: check PHP Safe Mode when uploads or installs fail |
Safe Mode was removed from PHP itself in 5.4 (2012); no supported PHP version has it |
PHP 5.4 |
||
Pro WordPress: change |
|
Always |
||
All-in-One, Ultimate Handbook: protect files with |
Apache 2.4 uses |
Apache 2.4 |
||
Tutorials: pretty permalinks require |
Only on Apache; nginx needs one |
Always |
||
All-in-One: a desktop install is a "local staging" site |
Staging runs on the production stack; a laptop differs in web server, PHP build, cache and permissions. Mark each
environment with |
5.5 |
Make WordPress Core: New wp_get_environment_type() function in WordPress 5.5 |
|
Tutorials: run the local site with |
|
2026 |
||
Tutorials: Docker Compose files with |
Current Compose ignores |
2023 |
||
Tutorials: back up the database with |
On MariaDB 11 the tool is |
MariaDB 11 |
Administration and wp-config.php
| Older claim | Current state | Since | Covered in | Official source |
|---|---|---|---|---|
All-in-One: |
It also blocks installing, uploading and deleting plugins and themes, removes the file editors and stops the
background updater, security releases included; |
Always |
Advanced Administration Handbook: wp-config.php, Disable Plugin and Theme Update and Installation |
|
Tutorials: only minor core releases install themselves |
Sites installed on 5.6 or later also receive major releases unless a VCS checkout or a policy says otherwise; plugins and themes auto-update when opted in (5.5) |
5.6 |
Make WordPress Core: Auto-updates interface for core major versions in 5.6 |
|
Tutorials: a failed plugin auto-update leaves the site broken |
An active plugin that causes a fatal error after an automatic update is rolled back (this needs working loopback requests); failed manual installs restore the old copy since 6.3 |
6.6 |
||
Tutorials: put update filters in |
Filters belong in a must-use plugin; |
Always |
Advanced Administration Handbook: Configuring Automatic Background Updates |
|
Ultimate Handbook: a |
No such constant exists; the |
Always |
||
Ultimate Handbook: |
PHP 7.0 removed the old |
PHP 7.0 |
||
Ultimate Handbook: define |
It only checks, repairs and optimises tables, and exposes |
Always |
||
Pro WordPress: encrypt the values in |
PHP must read them in clear text on every request; protect the file with permissions and location, or keep the secrets out of it in environment variables or a secret manager |
Always |
||
All-in-One: the memory defaults for single sites and Multisite |
|
Always |
||
Tutorials: turn on |
On its own it prints errors to every visitor ( |
Always |
||
Tutorials: a fatal error means a white screen and FTP |
The fatal error handler shows a critical-error message and e-mails a recovery-mode link when the fault is in a plugin or theme |
5.2 |
||
Tutorials: move a site with SQL |
Breaks serialized data; |
Always |
||
Pro WordPress: choose the editor in Settings > Writing |
Core has no such setting; the Classic Editor plugin adds the choice, and code uses the
|
5.0 |
||
All-in-One: Tools offers Press This |
Press This left core in 4.9 and is a separate plugin; importers are plugins too |
4.9 |
||
Tutorials: "Discourage search engines" adds |
Since 5.3 it prints a |
5.3 |
Make WordPress Core: Changes to prevent search engines indexing sites |
|
Tutorials: Comment Blacklist and comment whitelist settings |
Renamed Disallowed Comment Keys ( |
5.5 |
||
Tutorials: options are autoloaded |
The column holds |
6.6 |
Make WordPress Core: Options API, disabling autoload for large options |
|
Tutorials: resize photos before uploading them |
WordPress scales images above 2560 px and keeps the original (5.3), converts HEIC to JPEG (6.7) and, since 7.1, resizes in supporting browsers before upload |
5.3 |
Make WordPress Core: Handling of big images in WordPress 5.3 |
|
All-in-One, Ultimate Handbook: admin screenshots of 6.3 to 6.6 |
The Modern colour scheme is the default (7.0), the Command Palette works on every screen (6.9), Appearance > Fonts is a standalone page (7.0) and the toolbar stays visible in the editors (7.1) |
7.0 |
Security
| Older claim | Current state | Since | Covered in | Official source |
|---|---|---|---|---|
All-in-One: set 666 or 777 when uploads or installs fail |
644 for files, 755 for directories, 440 or 400 for |
Always |
Advanced Administration Handbook: Hardening, Changing file permissions |
|
Tutorials: passwords are stored as phpass (MD5-based) hashes |
bcrypt with a pre-hash, prefixed |
6.8 |
Make WordPress Core: WordPress 6.8 will use bcrypt for password hashing |
|
Tutorials: reset a lost password by writing an MD5 hash in phpMyAdmin |
Still accepted once and rehashed, but legacy; use "Lost your password?", |
6.8 |
||
Tutorials: WordPress enforces strong passwords |
It shows a strength meter and asks to confirm a weak password; enforcement needs a plugin or SSO |
Always |
||
Tutorials: scripts and apps need the user’s real password or a Basic Auth plugin |
Application passwords are built in: HTTPS-only by default, REST API and XML-RPC only, never |
5.6 |
Make WordPress Core: Application Passwords Integration Guide |
|
Tutorials: |
Since 4.4 the first failed login in a request makes the rest fail; disable XML-RPC when unused and rate-limit
|
4.4 |
||
Tutorials: hide or rename the login URL to stop attacks |
Obscurity, not a defense; rate limiting, strong passwords and two-factor login are |
Always |
||
Tutorials: install iThemes Security |
The same WordPress.org plugin was renamed Solid Security (9.0) and then Kadence Security (10.0) |
Plugin 10.0 |
||
Pro WordPress: an |
Any site can make a logged-in browser post to it (CSRF); check |
Always |
||
Ultimate Handbook: a Customizer setting without |
Every setting has a |
Always |
||
Tutorials: |
It tells whether an admin screen is loading; check a capability with |
Always |
||
Tutorials: |
|
6.2 |
Performance
| Older claim | Current state | Since | Covered in | Official source |
|---|---|---|---|---|
Pro WordPress: concatenate CSS and JavaScript and use image sprites |
Under HTTP/2 and HTTP/3 small cached files share one connection; ship minified files from a build step, use
|
HTTP/2 |
||
Pro WordPress: tune the MySQL query cache |
Removed in MySQL 8.0; MariaDB keeps one, off by default and poor under concurrent writes. Use a persistent object cache and the InnoDB buffer pool |
MySQL 8.0 |
||
Ultimate Handbook: use HTTP/2 Server Push for critical assets |
Removed from Chrome (106) and Firefox (132); use |
2022 |
Chrome for Developers: Remove HTTP/2 Server Push from Chrome |
|
Ultimate Handbook: lazy-load with a plugin, or a filter for iframes |
Native |
5.5 |
Make WordPress Core: Image performance enhancements in WordPress 6.3 |
|
Tutorials: move every script to the footer |
Register with |
6.3 |
Make WordPress Core: Registering scripts with async and defer attributes in 6.3 |
|
Tutorials: prefetching or prerendering needs a plugin |
Core adds speculative loading rules ( |
6.8 |
||
Tutorials: a page-caching plugin is enough |
Page caches serve anonymous visitors only; logged-in users, the admin and the REST API need a persistent object cache, OPcache and lean autoloaded options |
Always |
||
Tutorials: set |
Only together with a system cron; alone it stops scheduled posts, update checks and clean-up. Since 6.9 the spawn
runs on |
6.9 |
Plugin Handbook: Hooking WP-Cron Into the System Task Scheduler |
|
Ultimate Handbook: add an index on |
Core already creates it; a lookup by slug uses the |
Always |
||
Tutorials: HyperDB for read replicas |
Not updated since 2022; LudicrousDB is the maintained fork |
2022 |
||
Tutorials: optimise for First Input Delay |
Interaction to Next Paint replaced FID as a Core Web Vital in March 2024 |
2024 |
SEO
| Older claim | Current state | Since | Covered in | Official source |
|---|---|---|---|---|
All-in-One: ping search engines with the sitemap after publishing |
Google retired the sitemap ping endpoint (announced June 2023); list the sitemap in |
2023 |
Google Search Central Blog: Sitemaps ping endpoint is going away |
|
All-in-One: use the |
No longer supported; use the Links report in Search Console |
2017 |
||
Pro WordPress: the sitemap is at |
Core’s index is |
5.5 |
Make WordPress Core: New XML Sitemaps Functionality in WordPress 5.5 |
|
Pro WordPress: validate markup in the Structured Data Testing Tool |
Retired; use the Rich Results Test and the Schema Markup Validator |
2021 |
||
Ultimate Handbook: set |
Google ignores both and uses |
2023 |
||
Ultimate Handbook: build AMP pages to rank or reach Top Stories |
AMP is not required for any Google Search feature; core has no AMP output, and the AMP plugin is an extra template layer |
2021 |
||
Ultimate Handbook: turn on IP anonymization in Google Analytics |
A Universal Analytics setting; GA4 does not log or store IP addresses, and consent settings are what matter |
2023 |
||
Tutorials: submit the site to directories and link exchanges |
Links exchanged or bought to manipulate ranking are spam; mark paid links |
Always |
Multisite
| Older claim | Current state | Since | Covered in | Official source |
|---|---|---|---|---|
Pro WordPress: map domains with the WordPress MU Domain Mapping plugin; All-in-One: only through the host’s portal |
Native: edit the Site Address under Network Admin > Sites, then add DNS, a certificate and, on subdomain networks,
|
4.5 |
Advanced Administration Handbook: WordPress Multisite Domain Mapping |
|
All-in-One: a network has a fixed number of tables |
Six network tables ( |
5.1 |
||
All-in-One, Ultimate Handbook: Apache rules for the network with |
The official |
Apache 2.4 |
||
Tutorials: uploads live in |
Only networks created before 3.5; newer ones use |
3.5 |
||
Tutorials: react to new sites with |
Deprecated; use |
5.1 |
||
Tutorials: list sites with |
|
4.6 |
||
Tutorials: |
Deprecated in favour of |
6.7 |
Themes and design
| Older claim | Current state | Since | Covered in | Official source |
|---|---|---|---|---|
Pro WordPress: full site editing arrived in 5.4 to 5.6 |
Block themes, block templates and the Site Editor arrived in 5.9 (January 2022), |
5.9 |
||
Ultimate Handbook: full site editing is still maturing, so design with a commercial theme, the Customizer and a builder |
Block themes are the default of every bundled theme since Twenty Twenty-Two; builders are an optional ecosystem choice with lock-in and markup trade-offs |
5.9 |
||
Pro WordPress, Ultimate Handbook: a theme is PHP templates, |
That describes classic themes, which still work; block themes are HTML block templates plus |
5.9 |
||
Pro WordPress, Ultimate Handbook: adjust any theme in Customizer > Additional CSS |
The Customizer is hidden for block themes; Additional CSS is in Styles, and 7.0 added CSS per block instance |
7.0 |
Make WordPress Core: Custom CSS for individual block instances in 7.0 |
|
Pro WordPress: menus are built in Appearance > Menus with |
True for classic themes; block themes use Navigation blocks stored as |
7.0 |
||
Pro WordPress: widgets are |
The Widgets screen is a block editor since 5.8; block themes have no widget areas and use template parts and patterns instead |
5.8 |
Make WordPress Core: Block-based Widgets Editor in WordPress 5.8 |
|
Ultimate Handbook: reusable blocks |
Renamed synced patterns in 6.3 (same posts, same IDs), with per-instance overrides since 6.6 and for custom blocks since 7.0 |
6.3 |
WordPress News: Synced Patterns, the Evolution of Reusable Blocks |
|
All-in-One: Site Editor walkthroughs for 6.3 and Twenty Twenty-Four |
Template parts are listed under Patterns, Fonts is in Appearance (7.0), 7.1 adds the Identity section and responsive styles; Twenty Twenty-Five is the default theme |
7.1 |
||
Pro WordPress, Ultimate Handbook: load Google Fonts from Google’s servers |
Self-host with |
6.5 |
||
Tutorials: |
In version 3 |
6.6 |
||
All-in-One: a theme update keeps or overwrites the owner’s changes |
Edited templates and styles are |
5.9 |
||
Ultimate Handbook: a child theme needs |
A block child needs only |
5.9 |
||
Pro WordPress: register post types and shortcodes in the theme |
Plugin territory: content disappears on a theme switch, and the Theme Directory rejects it |
Always |
||
Tutorials: print |
Declare |
4.1 |
||
Tutorials: patterns are only for block themes |
Classic themes with |
6.8 |
Plugin and block development
| Older claim | Current state | Since | Covered in | Official source |
|---|---|---|---|---|
All-in-One: plugins cannot depend on other plugins |
The |
6.5 |
Make WordPress Core: Introducing Plugin Dependencies in WordPress 6.5 |
|
Pro WordPress: register a custom post type with labels and |
Without |
5.0 |
||
Pro WordPress: jQuery code with a bare |
WordPress loads jQuery in noConflict mode; wrap the code or use |
Always |
||
Ultimate Handbook: call |
Roles are stored in the database; later calls return |
Always |
||
Tutorials: call |
Flush on activation and deactivation only; per-request flushing is slow and can race |
Always |
||
Tutorials: call |
Not needed for WordPress.org plugins (4.6) or with |
6.7 |
Make WordPress Core: Internationalization improvements in 6.7 |
|
Tutorials: callbacks built with |
Removed in PHP 8.0; use a named function, a static method or a stored closure |
PHP 8.0 |
||
Tutorials: append output to every post with a |
In block themes a hooked block (Block Hooks) is visible and movable in the Site Editor |
6.4 |
Make WordPress Core: Introducing Block Hooks for dynamic blocks |
|
Tutorials: one |
|
6.8 |
Code Reference: wp_register_block_types_from_metadata_collection() |
|
Tutorials: |
|
7.1 |
||
Tutorials: every block needs JavaScript and a build |
Simple server-rendered blocks can be PHP-only: |
7.0 |
||
Tutorials: |
It runs Vitest since |
scripts 36 |
||
Tutorials: |
Playwright since |
scripts 33 |
||
Tutorials: an attribute with |
Bind a core block to |
6.5 |
||
Tutorials: admin list screens subclass |
The class is still marked private; core builds new screens with React and DataViews over the REST API |
6.5 |
||
Tutorials: install WPCS by cloning it and setting |
WPCS 3 installs only through Composer with PHPCSUtils, PHPCSExtra and the installer plugin; |
WPCS 3 |
||
Tutorials: |
|
5.5 |
||
Tutorials: a REST route needs no |
A missing one triggers |
5.5 |
Changed since older tutorials
The shifts below change the default way of doing something rather than correcting a single statement. The older way usually still works; new work should start from the newer one.
| Older way | Current way | Since | Covered in | Official source |
|---|---|---|---|---|
Classic themes (PHP templates) |
Block themes (HTML block templates and |
5.9 |
Learn WordPress: Converting a classic theme to a block theme |
|
Reusable blocks |
Synced patterns, with overrides |
6.3 |
WordPress Developer Blog: An introduction to overrides in synced patterns |
|
Customizer |
Site Editor Styles (global styles, style variations, section styles) |
5.9 |
||
Appearance > Menus |
Navigation block and |
5.9 |
||
Widget areas |
Template parts and patterns |
5.9 |
Learn WordPress: Importing widget areas from a classic theme to a block theme |
|
phpass password hashes |
bcrypt |
6.8 |
Make WordPress Core: WordPress 6.8 will use bcrypt for password hashing |
|
|
REST API routes with a |
4.7 |
||
jQuery on the front end |
Interactivity API directives with a script module; React stays the editor and admin technology |
6.5 |
||
Classic scripts for front-end code |
Script Modules ( |
6.5 |
||
|
Playground CLI ( |
2026 |
||
Jest in |
Vitest |
scripts 36 |
||
WordPress MU Domain Mapping plugin |
Native domain mapping |
4.5 |
Advanced Administration Handbook: WordPress Multisite Domain Mapping |
|
Google Fonts CDN or a fonts plugin |
Font Library, self-hosted files |
6.5 |
||
Lazy-loading and prefetch plugins |
Native |
6.8 |
||
Sitemap plugins for basic sitemaps |
Core sitemaps at |
5.5 |
Make WordPress Core: New XML Sitemaps Functionality in WordPress 5.5 |
|
|
DataViews and DataForm |
6.5 |
WordPress Developer Blog: How to use DataForm to create plugin settings pages |
|
Shortcodes and widgets for dynamic content |
Dynamic blocks with |
6.1 |
||
One |
Block metadata collections and |
6.8 |
Make WordPress Core: More efficient block type registration in 6.8 |
|
Custom REST endpoints for machine clients only |
Abilities API, exposed to AI agents through the MCP Adapter (an official package, not core) |
6.9 |
Frequently misdated features
Summaries of recent releases often attach these features to the wrong version. The dates below come from the developer notes and the Code Reference changelogs:
| Feature | Version | Common misdating | Official source |
|---|---|---|---|
|
6.6 |
Dated to 6.7 |
Make WordPress Core: Updates to the Interactivity API in 6.6 |
|
6.5 |
Described as new in 7.0; only the store-level |
Make WordPress Core: Changes to the Interactivity API in WordPress 7.0 |
|
6.8 |
Dated to 6.7, which introduced |
Code Reference: wp_register_block_types_from_metadata_collection() |
Block themes and the Site Editor |
5.9 |
Dated to 5.4 to 5.6 |
|
Synced patterns (rename of reusable blocks) |
6.3 |
Reusable blocks still described as current in books on 6.4 to 6.6 |
WordPress News: Synced Patterns, the Evolution of Reusable Blocks |
These features are covered in Interactivity API and block.json and Registration.
How to read older material
-
Check the version the text targets. A book or post written for 6.2 to 6.6 predates everything in the 6.7 to 7.1 rows of Versions and Release Cycle.
-
Ask whether the advice is about classic or block themes. Template files, the Customizer, widgets and Appearance > Menus remain correct for classic themes; the equivalents for block themes are in the Themes Overview.
-
Treat security snippets with suspicion. Missing nonces, missing capability checks, unescaped output and string-built SQL are the most common defects in copied code; compare them with Security for Developers.
-
Prefer the handbooks, field guides and developer notes. They are updated with each release; this page and the section bibliography in WordPress link the ones used here.