📖 Scenario: You manage a WordPress website that loads slowly because it loads all CSS and JavaScript files immediately. You want to improve the page load speed by optimizing the critical rendering path.This means you will load only the essential CSS inline and defer non-critical CSS and JavaScript files to load later.
🎯 Goal: Build a WordPress theme setup that inlines critical CSS in the header and defers loading of non-critical CSS and JavaScript files to improve page load speed.
📋 What You'll Learn
Create a variable holding the critical CSS styles as a string
Create a variable holding the URL of a non-critical CSS file
Add the critical CSS inline in the <head> section
Enqueue the non-critical CSS file with the media="print" attribute and load it asynchronously
Enqueue a JavaScript file with the defer attribute
💡 Why This Matters
🌍 Real World
Websites often load many CSS and JavaScript files that block rendering. Optimizing the critical rendering path helps pages load faster and improves user experience.
💼 Career
Front-end developers and WordPress theme developers use these techniques to improve website performance and SEO rankings.
Progress0 / 4 steps
1
Setup Critical CSS Variable
Create a PHP variable called $critical_css that contains this exact CSS string: body { background-color: #fff; color: #333; }
Wordpress
Hint
Use single quotes around the CSS string and assign it to $critical_css.
2
Add Non-Critical CSS URL Variable
Create a PHP variable called $non_critical_css_url and set it to the string get_template_directory_uri() . '/css/non-critical.css'
Wordpress
Hint
Use get_template_directory_uri() to get the theme URL and append the CSS path.
3
Inline Critical CSS and Enqueue Non-Critical CSS
Add a function called enqueue_critical_and_non_critical_css hooked to wp_head that: 1. Echoes the <style> tag with the $critical_css content inline. 2. Enqueues the non-critical CSS file using wp_enqueue_style with handle 'non-critical-css', URL $non_critical_css_url, no dependencies, no version, and media="print". 3. Adds an onload attribute to the non-critical CSS link to set this.media='all' for asynchronous loading.
Wordpress
Hint
Use wp_head hook to output inline CSS and enqueue the non-critical CSS with media print and onload attribute.
4
Defer JavaScript Loading
Add a function called defer_parsing_of_js hooked to script_loader_tag that adds the defer attribute to the script tag with handle 'theme-script'. Then enqueue a JavaScript file with handle 'theme-script', URL get_template_directory_uri() . '/js/theme.js', no dependencies, no version, and in footer.
Wordpress
Hint
Use script_loader_tag filter to add defer attribute and enqueue the script in the footer.
Practice
(1/5)
1. What is the main goal of critical rendering path optimization in WordPress?
easy
A. To increase the size of images for better quality
B. To add more plugins for extra features
C. To make the site load faster by prioritizing important content
D. To disable caching completely
Solution
Step 1: Understand the purpose of critical rendering path optimization
This optimization focuses on loading the most important parts of a webpage first to improve speed.
Step 2: Compare options with this goal
Adding plugins or increasing image size slows loading, and disabling caching is counterproductive.
Final Answer:
To make the site load faster by prioritizing important content -> Option C
Quick Check:
Optimization = Faster loading important content [OK]
Hint: Focus on speed by loading key content first [OK]
Common Mistakes:
Thinking more plugins always improve speed
Confusing image quality with loading speed
Ignoring caching benefits
2. Which WordPress hook is commonly used to defer JavaScript loading for better critical rendering path optimization?
easy
A. wp_footer
B. wp_enqueue_scripts
C. wp_head
D. init
Solution
Step 1: Identify the hook for managing scripts
wp_enqueue_scripts is the standard hook to add or modify scripts and styles in WordPress.
Step 2: Understand deferring JavaScript
Using wp_enqueue_scripts allows adding attributes like 'defer' to scripts to delay loading.
Final Answer:
wp_enqueue_scripts -> Option B
Quick Check:
Defer scripts with wp_enqueue_scripts [OK]
Hint: Use wp_enqueue_scripts to manage scripts loading [OK]
Common Mistakes:
Using wp_head which runs too early for deferring scripts
Using wp_footer without enqueuing scripts properly
Confusing init hook with script loading
3. Consider this WordPress code snippet to inline critical CSS:
B. It causes a syntax error due to missing semicolons
C. It does not add 'defer' attribute at all
D. It adds 'defer' to all scripts, including those that must load early
Solution
Step 1: Understand the filter's effect
The code adds 'defer' to every script tag by replacing ' src' with ' defer src'.
Step 2: Identify the problem with deferring all scripts
Some scripts must load early (like jQuery), deferring them breaks functionality.
Final Answer:
It adds 'defer' to all scripts, including those that must load early -> Option D
Quick Check:
Deferring all scripts = breaks early-loading scripts [OK]
Hint: Don't defer all scripts blindly; exclude critical ones [OK]
Common Mistakes:
Thinking it's a syntax error
Assuming defer is never added
Believing src attribute is removed
5. You want to optimize your WordPress site's critical rendering path by inlining small CSS and deferring non-critical JavaScript. Which approach best combines these techniques?
hard
A. Inline critical CSS in the <head> using a hook and add 'defer' attribute only to non-essential scripts via wp_enqueue_scripts
B. Load all CSS and JavaScript files normally without changes
C. Defer all JavaScript and load CSS files externally without inlining
D. Remove all CSS and JavaScript to speed up loading
Solution
Step 1: Combine inlining CSS and deferring JS properly
Inlining critical CSS in the head ensures fast style application; deferring only non-essential JS avoids blocking rendering.
Step 2: Evaluate other options
Loading all files normally misses optimization; deferring all JS or removing files breaks functionality or style.
Final Answer:
Inline critical CSS in the <head> using a hook and add 'defer' attribute only to non-essential scripts via wp_enqueue_scripts -> Option A
Quick Check:
Inline CSS + defer non-critical JS = best practice [OK]
Hint: Inline CSS early, defer only non-critical JS [OK]
Common Mistakes:
Deferring all scripts causing errors
Not inlining critical CSS
Removing essential files
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.