index.php->theme
๐ฆ WordPress
โจ The Prompt Phrase
index.php->theme
๐ป Code Preview
๐ฆ All-in-One Code
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index.php in Theme Folder - Interactive Tutorial</title>
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600;700;800&family=Fira+Code:wght@400;500;600&display=swap" rel="stylesheet">
<style>
:root {
--bg-primary: #0a0e27;
--bg-secondary: #151a35;
--bg-card: #1e2542;
--accent-purple: #a855f7;
--accent-blue: #3b82f6;
--accent-green: #10b981;
--accent-cyan: #06b6d4;
--accent-pink: #ec4899;
--accent-orange: #f59e0b;
--text-primary: #f0f6fc;
--text-secondary: #c9d1d9;
--text-muted: #8b949e;
--border-color: #30363d;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
font-family: 'Poppins', sans-serif;
background: var(--bg-primary);
color: var(--text-primary);
line-height: 1.6;
overflow-x: hidden;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
/* Hero Section */
.hero {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);
position: relative;
overflow: hidden;
}
.hero::before {
content: '';
position: absolute;
width: 200%;
height: 200%;
background: repeating-linear-gradient(45deg, transparent, transparent 10px, rgba(255,255,255,0.03) 10px, rgba(255,255,255,0.03) 20px);
animation: moveBackground 20s linear infinite;
}
@keyframes moveBackground {
0% { transform: translate(0, 0); }
100% { transform: translate(50px, 50px); }
}
.hero-content {
text-align: center;
z-index: 1;
animation: fadeInUp 1s ease;
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.hero h1 {
font-size: 4rem;
font-weight: 800;
margin-bottom: 20px;
text-shadow: 0 0 40px rgba(0,0,0,0.3);
animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.05); }
}
.hero .code-highlight {
background: rgba(0,0,0,0.5);
padding: 20px 50px;
border-radius: 20px;
font-family: 'Fira Code', monospace;
display: inline-block;
backdrop-filter: blur(10px);
border: 3px solid rgba(255,255,255,0.3);
font-size: 2.5rem;
box-shadow: 0 10px 40px rgba(0,0,0,0.3);
margin: 20px 0;
}
.hero p {
font-size: 1.5rem;
margin-top: 20px;
opacity: 0.95;
font-weight: 300;
}
.scroll-indicator {
position: absolute;
bottom: 30px;
left: 50%;
transform: translateX(-50%);
animation: bounce 2s infinite;
font-size: 2.5rem;
cursor: pointer;
filter: drop-shadow(0 0 10px rgba(255,255,255,0.5));
}
@keyframes bounce {
0%, 20%, 50%, 80%, 100% { transform: translateX(-50%) translateY(0); }
40% { transform: translateX(-50%) translateY(-15px); }
60% { transform: translateX(-50%) translateY(-7px); }
}
/* Progress Bar */
.progress-bar {
position: fixed;
top: 0;
left: 0;
height: 5px;
background: linear-gradient(90deg, var(--accent-purple), var(--accent-blue), var(--accent-green));
z-index: 1000;
transition: width 0.3s ease;
box-shadow: 0 0 20px rgba(168, 85, 247, 0.6);
}
/* Section Styles */
section {
padding: 80px 0;
opacity: 0;
transform: translateY(30px);
transition: all 0.6s ease;
}
section.visible {
opacity: 1;
transform: translateY(0);
}
.section-header {
text-align: center;
margin-bottom: 60px;
}
.section-header h2 {
font-size: 3rem;
background: linear-gradient(135deg, var(--accent-purple), var(--accent-cyan));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 15px;
font-weight: 800;
}
.section-header p {
color: var(--text-secondary);
font-size: 1.2rem;
}
/* Card Styles */
.card {
background: var(--bg-card);
border-radius: 20px;
padding: 40px;
margin-bottom: 30px;
border: 1px solid var(--border-color);
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.card::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 4px;
background: linear-gradient(90deg, var(--accent-purple), var(--accent-cyan));
transform: scaleX(0);
transition: transform 0.3s ease;
}
.card:hover::before {
transform: scaleX(1);
}
.card:hover {
transform: translateY(-5px);
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5);
border-color: var(--accent-purple);
}
.card h3 {
font-size: 1.8rem;
margin-bottom: 20px;
color: var(--accent-purple);
font-weight: 700;
}
.card h4 {
font-size: 1.3rem;
margin-bottom: 10px;
color: var(--accent-cyan);
font-weight: 600;
}
.card ul {
margin-left: 20px;
margin-top: 10px;
}
.card li {
margin-bottom: 10px;
line-height: 1.8;
}
/* Code Block */
.code-block {
background: #0d1117;
border-radius: 15px;
padding: 25px;
margin: 20px 0;
position: relative;
font-family: 'Fira Code', monospace;
overflow-x: auto;
border: 1px solid var(--border-color);
box-shadow: 0 4px 20px rgba(0,0,0,0.3);
}
.code-block .copy-btn {
position: absolute;
top: 15px;
right: 15px;
background: var(--accent-purple);
color: white;
border: none;
padding: 8px 16px;
border-radius: 8px;
cursor: pointer;
font-size: 0.9rem;
transition: all 0.3s ease;
font-family: 'Poppins', sans-serif;
font-weight: 600;
}
.code-block .copy-btn:hover {
background: var(--accent-pink);
transform: scale(1.05);
}
.code-block pre {
margin: 0;
color: #e6edf3;
font-size: 0.95rem;
line-height: 1.6;
}
/* Grid Layout */
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 30px;
margin: 40px 0;
}
.grid-item {
background: var(--bg-card);
padding: 30px;
border-radius: 15px;
border: 1px solid var(--border-color);
transition: all 0.3s ease;
}
.grid-item:hover {
border-color: var(--accent-purple);
transform: translateY(-5px);
box-shadow: 0 10px 30px rgba(168, 85, 247, 0.3);
}
.grid-item .icon {
font-size: 3rem;
margin-bottom: 15px;
display: block;
}
/* Tabs */
.tabs {
display: flex;
gap: 10px;
margin-bottom: 30px;
flex-wrap: wrap;
}
.tab-btn {
background: var(--bg-secondary);
color: var(--text-secondary);
border: 1px solid var(--border-color);
padding: 12px 24px;
border-radius: 10px;
cursor: pointer;
transition: all 0.3s ease;
font-size: 1rem;
font-family: 'Poppins', sans-serif;
font-weight: 600;
}
.tab-btn:hover {
border-color: var(--accent-purple);
transform: translateY(-2px);
}
.tab-btn.active {
background: linear-gradient(135deg, var(--accent-purple), var(--accent-cyan));
color: white;
border-color: transparent;
}
.tab-content {
display: none;
}
.tab-content.active {
display: block;
animation: fadeIn 0.5s ease;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
/* Quiz Styles */
.quiz-question {
background: var(--bg-card);
padding: 30px;
border-radius: 15px;
margin-bottom: 20px;
border: 1px solid var(--border-color);
}
.quiz-options {
display: flex;
flex-direction: column;
gap: 15px;
margin-top: 20px;
}
.quiz-option {
background: var(--bg-secondary);
padding: 15px 20px;
border-radius: 10px;
border: 2px solid var(--border-color);
cursor: pointer;
transition: all 0.3s ease;
}
.quiz-option:hover {
border-color: var(--accent-purple);
transform: translateX(5px);
}
.quiz-option.correct {
border-color: var(--accent-green);
background: rgba(16, 185, 129, 0.1);
}
.quiz-option.incorrect {
border-color: #ef4444;
background: rgba(239, 68, 68, 0.1);
}
.quiz-feedback {
margin-top: 20px;
padding: 15px;
border-radius: 10px;
display: none;
}
.quiz-feedback.show {
display: block;
animation: fadeIn 0.5s ease;
}
.quiz-feedback.correct {
background: rgba(16, 185, 129, 0.1);
border: 1px solid var(--accent-green);
color: var(--accent-green);
}
.quiz-feedback.incorrect {
background: rgba(239, 68, 68, 0.1);
border: 1px solid #ef4444;
color: #ef4444;
}
/* Summary Card */
.summary-card {
background: linear-gradient(135deg, rgba(168, 85, 247, 0.1), rgba(6, 182, 212, 0.1));
border: 2px solid var(--accent-purple);
border-radius: 20px;
padding: 40px;
margin: 40px 0;
}
.summary-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
margin-top: 30px;
}
.summary-item {
background: var(--bg-card);
padding: 20px;
border-radius: 10px;
border-left: 4px solid var(--accent-purple);
}
.summary-item strong {
color: var(--accent-purple);
display: block;
margin-bottom: 10px;
font-weight: 700;
}
/* Footer */
footer {
background: var(--bg-secondary);
padding: 40px 20px;
text-align: center;
border-top: 1px solid var(--border-color);
}
footer p {
color: var(--text-muted);
}
.badge {
display: inline-block;
background: linear-gradient(135deg, var(--accent-purple), var(--accent-cyan));
padding: 8px 16px;
border-radius: 20px;
font-size: 0.9rem;
margin: 5px;
font-weight: 600;
}
/* Warning/Info Boxes */
.warning-box {
background: rgba(239, 68, 68, 0.1);
border-left: 4px solid #ef4444;
padding: 20px;
border-radius: 10px;
margin: 20px 0;
}
.success-box {
background: rgba(16, 185, 129, 0.1);
border-left: 4px solid var(--accent-green);
padding: 20px;
border-radius: 10px;
margin: 20px 0;
}
.info-box {
background: rgba(59, 130, 246, 0.1);
border-left: 4px solid var(--accent-blue);
padding: 20px;
border-radius: 10px;
margin: 20px 0;
}
/* Confetti */
.confetti {
position: fixed;
width: 10px;
height: 10px;
animation: confetti-fall 3s linear forwards;
pointer-events: none;
}
@keyframes confetti-fall {
to {
transform: translateY(100vh) rotate(360deg);
opacity: 0;
}
}
/* Demo Box */
.demo-box {
background: var(--bg-secondary);
border: 2px solid var(--accent-purple);
border-radius: 15px;
padding: 30px;
margin: 20px 0;
}
.demo-button {
background: linear-gradient(135deg, var(--accent-purple), var(--accent-cyan));
color: white;
border: none;
padding: 12px 30px;
border-radius: 10px;
cursor: pointer;
font-size: 1rem;
font-weight: 600;
transition: all 0.3s ease;
margin: 10px;
}
.demo-button:hover {
transform: translateY(-2px);
box-shadow: 0 10px 20px rgba(168, 85, 247, 0.3);
}
.demo-output {
background: #0d1117;
border: 1px solid var(--border-color);
border-radius: 10px;
padding: 20px;
margin-top: 20px;
min-height: 100px;
font-family: 'Fira Code', monospace;
}
#quiz-complete {
text-align: center;
padding: 40px;
background: linear-gradient(135deg, rgba(168, 85, 247, 0.2), rgba(6, 182, 212, 0.2));
border-radius: 20px;
border: 2px solid var(--accent-purple);
margin-top: 30px;
display: none;
}
/* Hierarchy Diagram */
.hierarchy {
background: var(--bg-secondary);
border-radius: 15px;
padding: 30px;
margin: 20px 0;
}
.hierarchy-level {
margin: 15px 0;
padding-left: 20px;
border-left: 3px solid var(--accent-purple);
}
.hierarchy-item {
background: var(--bg-card);
padding: 15px;
border-radius: 10px;
margin: 10px 0;
border: 1px solid var(--border-color);
}
.hierarchy-item.fallback {
border-color: var(--accent-orange);
background: rgba(245, 158, 11, 0.1);
}
/* Responsive */
@media (max-width: 768px) {
.hero h1 {
font-size: 2.5rem;
}
.hero .code-highlight {
font-size: 1.5rem;
padding: 15px 30px;
}
.hero p {
font-size: 1.2rem;
}
.section-header h2 {
font-size: 2rem;
}
.grid {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div class="progress-bar" id="progressBar"></div>
<!-- Hero Section -->
<section class="hero" id="hero">
<div class="hero-content">
<h1>๐ WordPress Theme Foundation</h1>
<div class="code-highlight">index.php</div>
<p>The Ultimate Fallback Template</p>
</div>
<div class="scroll-indicator" onclick="document.getElementById('what-is-it').scrollIntoView({behavior: 'smooth'})">
โฌ๏ธ
</div>
</section>
<!-- What Is It Section -->
<section id="what-is-it">
<div class="container">
<div class="section-header">
<h2>๐ค What Is index.php?</h2>
<p>The most important file in your WordPress theme</p>
</div>
<div class="card">
<h3>๐ The Simple Definition</h3>
<p><strong>index.php</strong> is the <em>only required file</em> in a WordPress theme. It's the ultimate fallback template that WordPress uses when no other more specific template exists. Think of it as your theme's safety net!</p>
<div class="info-box">
<strong>๐ฏ Think of it like this:</strong>
<p>Imagine a restaurant with a menu. You have specific dishes for breakfast, lunch, and dinner. But what if someone comes in at an odd hour? You need a "default menu" that works anytime. That's <code>index.php</code>โit's the default template that displays <em>anything</em> when WordPress can't find a more specific template!</p>
</div>
<div class="grid">
<div class="grid-item">
<span class="icon">๐</span>
<h4>What It Is</h4>
<p>The default/fallback template file</p>
</div>
<div class="grid-item">
<span class="icon">โ ๏ธ</span>
<h4>Importance</h4>
<p>REQUIRED - Theme won't work without it!</p>
</div>
<div class="grid-item">
<span class="icon">๐</span>
<h4>Location</h4>
<p>wp-content/themes/your-theme/</p>
</div>
</div>
</div>
<div class="card">
<h3>๐ฏ The Template Hierarchy</h3>
<div class="hierarchy">
<h4 style="color: var(--accent-cyan); margin-bottom: 20px;">WordPress Template Hierarchy (Simplified):</h4>
<div class="hierarchy-level">
<div class="hierarchy-item">
<strong>1. Specific Templates</strong>
<p style="font-size: 0.9rem; color: var(--text-muted);">single.php, page.php, archive.php, etc.</p>
</div>
</div>
<div class="hierarchy-level">
<div class="hierarchy-item">
<strong>2. Generic Templates</strong>
<p style="font-size: 0.9rem; color: var(--text-muted);">singular.php, archive.php</p>
</div>
</div>
<div class="hierarchy-level">
<div class="hierarchy-item fallback">
<strong>3. index.php โ ULTIMATE FALLBACK!</strong>
<p style="font-size: 0.9rem; color: var(--text-muted);">Used when nothing else matches</p>
</div>
</div>
</div>
<div class="warning-box">
<strong>โ ๏ธ Critical Fact:</strong>
<p>Without <code>index.php</code>, your theme is <strong>broken</strong>. WordPress requires it to function. Even if you have single.php, page.php, and every other template, you MUST have index.php!</p>
</div>
</div>
</div>
</section>
<!-- Why Use It Section -->
<section id="why-use-it">
<div class="container">
<div class="section-header">
<h2>๐ก Why Is index.php Important?</h2>
<p>More than just a fallback!</p>
</div>
<div class="grid">
<div class="card">
<h3>๐ก๏ธ Safety Net</h3>
<p>Ensures your site always displays something, even if specific templates are missing!</p>
</div>
<div class="card">
<h3>โ ๏ธ Required File</h3>
<p>WordPress won't recognize your theme without it. It's non-negotiable!</p>
</div>
<div class="card">
<h3>๐จ Minimal Theme Option</h3>
<p>You can build an entire theme with just index.php and style.css!</p>
</div>
<div class="card">
<h3>๐ Universal Template</h3>
<p>Can display posts, pages, archives, search resultsโeverything!</p>
</div>
<div class="card">
<h3>๐ Quick Prototyping</h3>
<p>Start with index.php, then add specific templates as needed!</p>
</div>
<div class="card">
<h3>๐ฏ Fallback Logic</h3>
<p>If you delete other templates, index.php keeps your site running!</p>
</div>
</div>
</div>
</section>
<!-- How It Works Section -->
<section id="how-it-works">
<div class="container">
<div class="section-header">
<h2>โ๏ธ How Does It Work?</h2>
<p>Understanding the fallback mechanism</p>
</div>
<div class="card">
<h3>๐ Basic index.php Structure</h3>
<div class="code-block">
<button class="copy-btn" onclick="copyCode(this)">๐ Copy</button>
<pre><code><?php get_header(); ?>
<main id="primary">
<?php
if ( have_posts() ) :
while ( have_posts() ) :
the_post();
?>
<article id="post-<?php the_ID(); ?>">
<h2>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</h2>
<div class="meta">
<?php the_date(); ?> | <?php the_author(); ?>
</div>
<div class="content">
<?php the_excerpt(); ?>
</div>
</article>
<?php
endwhile;
// Pagination
the_posts_pagination();
else :
?>
<p>No content found.</p>
<?php
endif;
?>
</main>
<?php get_sidebar(); ?>
<?php get_footer(); ?></code></pre>
</div>
<div class="success-box">
<strong>โ
Key Components:</strong>
<ul>
<li><strong>get_header():</strong> Includes header.php</li>
<li><strong>The Loop:</strong> Displays posts/pages</li>
<li><strong>Conditional Logic:</strong> Handles empty results</li>
<li><strong>get_sidebar():</strong> Includes sidebar.php</li>
<li><strong>get_footer():</strong> Includes footer.php</li>
</ul>
</div>
</div>
<div class="card">
<h3>๐ How WordPress Chooses Templates</h3>
<div class="demo-box">
<h4 style="margin-bottom: 20px;">Click to see the fallback chain:</h4>
<button class="demo-button" onclick="showFallback('single')">๐ Single Post</button>
<button class="demo-button" onclick="showFallback('page')">๐ Page</button>
<button class="demo-button" onclick="showFallback('archive')">๐ Archive</button>
<button class="demo-button" onclick="showFallback('search')">๐ Search</button>
<div class="demo-output" id="fallbackOutput">
<p style="color: var(--text-muted);">๐ Click a button to see the template hierarchy!</p>
</div>
</div>
</div>
</div>
</section>
<!-- Live Demo Section -->
<section id="live-demo">
<div class="container">
<div class="section-header">
<h2>๐ฎ Interactive Examples</h2>
<p>See different index.php approaches!</p>
</div>
<div class="card">
<div class="tabs">
<button class="tab-btn active" onclick="switchTab(event, 'minimal')">Minimal</button>
<button class="tab-btn" onclick="switchTab(event, 'standard')">Standard</button>
<button class="tab-btn" onclick="switchTab(event, 'advanced')">Advanced</button>
</div>
<div id="minimal" class="tab-content active">
<h4>๐ฏ Minimal index.php (Bare Bones)</h4>
<div class="code-block">
<button class="copy-btn" onclick="copyCode(this)">๐ Copy</button>
<pre><code><?php
// Absolute minimum theme with just index.php
get_header();
if ( have_posts() ) :
while ( have_posts() ) : the_post();
the_title( '<h2>', '</h2>' );
the_content();
endwhile;
endif;
get_footer();</code></pre>
</div>
<div class="success-box">
<strong>โ
Perfect for:</strong> Learning, prototyping, ultra-simple sites
</div>
</div>
<div id="standard" class="tab-content">
<h4>๐ Standard index.php (Production Ready)</h4>
<div class="code-block">
<button class="copy-btn" onclick="copyCode(this)">๐ Copy</button>
<pre><code><?php get_header(); ?>
<div class="container">
<main id="primary" class="site-main">
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<article <?php post_class(); ?>>
<header class="entry-header">
<?php the_title( '<h2><a href="' . get_permalink() . '">', '</a></h2>' ); ?>
<div class="entry-meta">
<span><?php the_date(); ?></span>
<span>By <?php the_author(); ?></span>
</div>
</header>
<?php if ( has_post_thumbnail() ) : ?>
<div class="post-thumbnail">
<?php the_post_thumbnail(); ?>
</div>
<?php endif; ?>
<div class="entry-content">
<?php the_excerpt(); ?>
</div>
<footer class="entry-footer">
<?php the_category( ', ' ); ?>
</footer>
</article>
<?php endwhile; ?>
<?php the_posts_pagination(); ?>
<?php else : ?>
<p>No posts found.</p>
<?php endif; ?>
</main>
<?php get_sidebar(); ?>
</div>
<?php get_footer(); ?></code></pre>
</div>
</div>
<div id="advanced" class="tab-content">
<h4>๐ Advanced index.php (With Conditionals)</h4>
<div class="code-block">
<button class="copy-btn" onclick="copyCode(this)">๐ Copy</button>
<pre><code><?php get_header(); ?>
<main id="primary">
<?php
// Display different content based on what's being viewed
if ( is_home() ) {
echo '<h1>Latest Posts</h1>';
} elseif ( is_search() ) {
echo '<h1>Search Results for: ' . get_search_query() . '</h1>';
} elseif ( is_archive() ) {
the_archive_title( '<h1>', '</h1>' );
}
?>
<?php if ( have_posts() ) : ?>
<div class="posts-grid">
<?php while ( have_posts() ) : the_post(); ?>
<article <?php post_class(); ?>>
<?php if ( has_post_thumbnail() ) : ?>
<a href="<?php the_permalink(); ?>">
<?php the_post_thumbnail( 'medium' ); ?>
</a>
<?php endif; ?>
<h2>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</h2>
<?php if ( is_single() ) : ?>
<?php the_content(); ?>
<?php else : ?>
<?php the_excerpt(); ?>
<?php endif; ?>
</article>
<?php endwhile; ?>
</div>
<?php the_posts_pagination(); ?>
<?php else : ?>
<div class="no-results">
<h2>Nothing Found</h2>
<p>Sorry, no content matches your request.</p>
<?php get_search_form(); ?>
</div>
<?php endif; ?>
</main>
<?php get_footer(); ?></code></pre>
</div>
</div>
</div>
</div>
</section>
<!-- Common Mistakes Section -->
<section id="common-mistakes">
<div class="container">
<div class="section-header">
<h2>โ ๏ธ Common Mistakes</h2>
<p>Avoid these index.php pitfalls!</p>
</div>
<div class="card">
<div class="warning-box">
<h3>โ Mistake #1: Not Having index.php</h3>
<p><strong>Result:</strong> WordPress won't recognize your theme!</p>
<div class="code-block">
<pre><code>// WRONG - Theme folder without index.php
themes/my-theme/
โโโ style.css
โโโ single.php
โโโ page.php
โโโ โ NO index.php!
// CORRECT โ
themes/my-theme/
โโโ style.css
โโโ index.php โ MUST HAVE!
โโโ single.php
โโโ page.php</code></pre>
</div>
</div>
<div class="warning-box">
<h3>โ Mistake #2: Empty index.php</h3>
<p>Having the file but leaving it blank breaks your site!</p>
<ul>
<li>โ Blank file</li>
<li>โ Just HTML with no Loop</li>
<li>โ
<strong>Must include The Loop</strong></li>
</ul>
</div>
<div class="warning-box">
<h3>โ Mistake #3: Forgetting The Loop</h3>
<div class="code-block">
<pre><code>// WRONG - No loop!
<?php get_header(); ?>
<h1><?php the_title(); ?></h1> <!-- Won't work! -->
<?php get_footer(); ?>
// CORRECT โ
<?php get_header(); ?>
<?php while ( have_posts() ) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<?php endwhile; ?>
<?php get_footer(); ?></code></pre>
</div>
</div>
<div class="warning-box">
<h3>โ Mistake #4: Wrong File Name</h3>
<ul>
<li>โ Index.php (capital I)</li>
<li>โ index.html</li>
<li>โ main.php</li>
<li>โ
<strong>index.php</strong> (exact, lowercase)</li>
</ul>
</div>
</div>
</div>
</section>
<!-- Pro Tips Section -->
<section id="pro-tips">
<div class="container">
<div class="section-header">
<h2>๐ Pro Tips</h2>
<p>Master index.php like a pro!</p>
</div>
<div class="grid">
<div class="card">
<h3>๐ก Tip #1: Start Simple</h3>
<p>Begin with just index.php and style.css, then add specific templates as needed!</p>
</div>
<div class="card">
<h3>๐จ Tip #2: Use Conditionals</h3>
<div class="code-block">
<pre><code><?php if ( is_home() ) : ?>
<!-- Homepage content -->
<?php elseif ( is_single() ) : ?>
<!-- Single post -->
<?php endif; ?></code></pre>
</div>
</div>
<div class="card">
<h3>๐ Tip #3: Template Parts</h3>
<div class="code-block">
<pre><code>// Organize better
get_template_part( 'content', 'post' );</code></pre>
</div>
</div>
<div class="card">
<h3>โก Tip #4: Handle Empty States</h3>
<p>Always provide a message when no posts are found!</p>
</div>
<div class="card">
<h3>๐ง Tip #5: Keep It Generic</h3>
<p>index.php should work for ANY content type. Keep it flexible!</p>
</div>
<div class="card">
<h3>๐ฑ Tip #6: Test Fallback</h3>
<p>Temporarily delete other templates to ensure index.php works!</p>
</div>
</div>
</div>
</section>
<!-- Quiz Section -->
<section id="quiz">
<div class="container">
<div class="section-header">
<h2>๐ฏ Test Your Knowledge!</h2>
<p>Time to prove you're an index.php master!</p>
</div>
<div class="quiz-question">
<h3>Question 1: Is index.php required in a WordPress theme?</h3>
<div class="quiz-options">
<div class="quiz-option" onclick="checkAnswer(this, false, 1)">
A) No, it's optional
</div>
<div class="quiz-option" onclick="checkAnswer(this, true, 1)">
B) Yes, it's absolutely required
</div>
<div class="quiz-option" onclick="checkAnswer(this, false, 1)">
C) Only if you don't have other templates
</div>
<div class="quiz-option" onclick="checkAnswer(this, false, 1)">
D) Only for blog themes
</div>
</div>
<div class="quiz-feedback" id="feedback1"></div>
</div>
<div class="quiz-question">
<h3>Question 2: What is index.php's main purpose?</h3>
<div class="quiz-options">
<div class="quiz-option" onclick="checkAnswer(this, false, 2)">
A) Display only the homepage
</div>
<div class="quiz-option" onclick="checkAnswer(this, true, 2)">
B) Ultimate fallback for all content
</div>
<div class="quiz-option" onclick="checkAnswer(this, false, 2)">
C) Display blog posts only
</div>
<div class="quiz-option" onclick="checkAnswer(this, false, 2)">
D) Handle 404 errors
</div>
</div>
<div class="quiz-feedback" id="feedback2"></div>
</div>
<div class="quiz-question">
<h3>Question 3: Can you build a theme with ONLY index.php and style.css?</h3>
<div class="quiz-options">
<div class="quiz-option" onclick="checkAnswer(this, false, 3)">
A) No, you need at least 5 files
</div>
<div class="quiz-option" onclick="checkAnswer(this, true, 3)">
B) Yes, those are the only required files
</div>
<div class="quiz-option" onclick="checkAnswer(this, false, 3)">
C) No, you also need functions.php
</div>
<div class="quiz-option" onclick="checkAnswer(this, false, 3)">
D) No, you need header.php too
</div>
</div>
<div class="quiz-feedback" id="feedback3"></div>
</div>
<div id="quiz-complete">
<h2 style="font-size: 3rem;">๐ Congratulations!</h2>
<p style="font-size: 1.5rem; margin-top: 20px;">You're now an index.php expert!</p>
<div class="badge">WordPress Master</div>
<div class="badge">Theme Developer</div>
<div class="badge">index.php Pro</div>
</div>
</div>
</section>
<!-- Summary Section -->
<section id="summary">
<div class="container">
<div class="section-header">
<h2>๐ Quick Reference</h2>
<p>Your index.php cheat sheet</p>
</div>
<div class="summary-card">
<h3>๐ฏ index.php Essentials</h3>
<div class="summary-grid">
<div class="summary-item">
<strong>โ
Status</strong>
<p>REQUIRED - Theme won't work without it</p>
</div>
<div class="summary-item">
<strong>โ
Purpose</strong>
<p>Ultimate fallback template</p>
</div>
<div class="summary-item">
<strong>โ
Location</strong>
<p>Theme root directory</p>
</div>
<div class="summary-item">
<strong>โ
Must Include</strong>
<p>The WordPress Loop</p>
</div>
<div class="summary-item">
<strong>โ
Can Display</strong>
<p>Posts, pages, archives, search</p>
</div>
<div class="summary-item">
<strong>โ
Minimal Theme</strong>
<p>index.php + style.css = valid theme</p>
</div>
<div class="summary-item">
<strong>โ
Hierarchy</strong>
<p>Last in template hierarchy</p>
</div>
<div class="summary-item">
<strong>โ
Flexibility</strong>
<p>Should handle any content type</p>
</div>
</div>
<div class="success-box" style="margin-top: 30px;">
<h4>๐ Key Takeaways:</h4>
<ul>
<li>โจ Only required theme file (besides style.css)</li>
<li>๐ฏ Ultimate fallback when no specific template exists</li>
<li>๐จ Can build entire theme with just this file</li>
<li>โก Must include The WordPress Loop</li>
<li>๐ง Should be generic and flexible</li>
<li>๐ Start here, add specific templates later</li>
</ul>
</div>
</div>
</div>
</section>
<!-- Footer -->
<footer>
<div class="container">
<h3 style="margin-bottom: 20px;">๐ Mission Accomplished!</h3>
<p>You've mastered index.php and are ready to build WordPress themes from the ground up!</p>
<p style="margin-top: 20px; color: var(--text-muted); font-size: 0.9rem;">
Generated by <strong>AI Prompt Dictionary</strong> ๐ค<br>
Making learning interactive, fun, and effective!
</p>
<div style="margin-top: 30px;">
<span class="badge">Interactive Learning</span>
<span class="badge">WordPress Master</span>
<span class="badge">Theme Development</span>
</div>
</div>
</footer>
<script>
// Progress Bar
window.addEventListener('scroll', () => {
const windowHeight = window.innerHeight;
const documentHeight = document.documentElement.scrollHeight - windowHeight;
const scrolled = window.scrollY;
const progress = (scrolled / documentHeight) * 100;
document.getElementById('progressBar').style.width = progress + '%';
});
// Intersection Observer
const sections = document.querySelectorAll('section');
const observerOptions = {
threshold: 0.3,
rootMargin: '0px'
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
}
});
}, observerOptions);
sections.forEach(section => observer.observe(section));
// Tab Switching
function switchTab(event, tabName) {
const tabContents = document.querySelectorAll('.tab-content');
const tabBtns = document.querySelectorAll('.tab-btn');
tabContents.forEach(content => content.classList.remove('active'));
tabBtns.forEach(btn => btn.classList.remove('active'));
document.getElementById(tabName).classList.add('active');
event.target.classList.add('active');
}
// Copy Code
function copyCode(button) {
const codeBlock = button.nextElementSibling;
const code = codeBlock.textContent;
navigator.clipboard.writeText(code).then(() => {
button.textContent = 'โ Copied!';
button.style.background = 'var(--accent-green)';
setTimeout(() => {
button.textContent = '๐ Copy';
button.style.background = 'var(--accent-purple)';
}, 2000);
});
}
// Interactive Fallback Demo
function showFallback(type) {
const output = document.getElementById('fallbackOutput');
const demos = {
single: `<span style="color: var(--accent-green);">โ
Single Post Template Hierarchy</span>
<span style="color: var(--text-secondary);">WordPress looks for templates in this order:
1. single-{post-type}-{slug}.php
2. single-{post-type}.php
3. single.php
4. singular.php
5. index.php โ FALLBACK!</span>`,
page: `<span style="color: var(--accent-cyan);">โ
Page Template Hierarchy</span>
<span style="color: var(--text-secondary);">WordPress looks for templates in this order:
1. Custom Template (selected in editor)
2. page-{slug}.php
3. page-{id}.php
4. page.php
5. singular.php
6. index.php โ FALLBACK!</span>`,
archive: `<span style="color: var(--accent-pink);">โ
Archive Template Hierarchy</span>
<span style="color: var(--text-secondary);">WordPress looks for templates in this order:
1. archive-{post-type}.php
2. archive.php
3. index.php โ FALLBACK!</span>`,
search: `<span style="color: var(--accent-orange);">โ
Search Results Hierarchy</span>
<span style="color: var(--text-secondary);">WordPress looks for templates in this order:
1. search.php
2. index.php โ FALLBACK!
If search.php doesn't exist, index.php handles it!</span>`
};
output.innerHTML = `<pre style="margin: 0;">${demos[type]}</pre>`;
}
// Quiz Logic
let correctAnswers = 0;
let answeredQuestions = new Set();
function checkAnswer(element, isCorrect, questionNum) {
if (answeredQuestions.has(questionNum)) return;
answeredQuestions.add(questionNum);
const feedback = document.getElementById('feedback' + questionNum);
const options = element.parentElement.querySelectorAll('.quiz-option');
options.forEach(opt => opt.style.pointerEvents = 'none');
if (isCorrect) {
element.classList.add('correct');
feedback.className = 'quiz-feedback correct show';
feedback.innerHTML = '๐ Perfect! You nailed it!';
correctAnswers++;
createConfetti();
} else {
element.classList.add('incorrect');
feedback.className = 'quiz-feedback incorrect show';
feedback.innerHTML = 'โ Not quite! Review the section above.';
}
if (answeredQuestions.size === 3 && correctAnswers === 3) {
setTimeout(() => {
document.getElementById('quiz-complete').style.display = 'block';
createMegaConfetti();
}, 1000);
}
}
// Confetti Effects
function createConfetti() {
const colors = ['#a855f7', '#3b82f6', '#10b981', '#ec4899'];
for (let i = 0; i < 30; i++) {
const confetti = document.createElement('div');
confetti.className = 'confetti';
confetti.style.left = Math.random() * 100 + '%';
confetti.style.background = colors[Math.floor(Math.random() * colors.length)];
confetti.style.animationDelay = Math.random() * 0.5 + 's';
document.body.appendChild(confetti);
setTimeout(() => confetti.remove(), 3000);
}
}
function createMegaConfetti() {
const colors = ['#a855f7', '#3b82f6', '#10b981', '#ec4899', '#f59e0b'];
for (let i = 0; i < 100; i++) {
const confetti = document.createElement('div');
confetti.className = 'confetti';
confetti.style.left = Math.random() * 100 + '%';
confetti.style.background = colors[Math.floor(Math.random() * colors.length)];
confetti.style.animationDelay = (Math.random() * 2) + 's';
confetti.style.width = (Math.random() * 10 + 5) + 'px';
confetti.style.height = confetti.style.width;
document.body.appendChild(confetti);
setTimeout(() => confetti.remove(), 5000);
}
}
</script>
</body>
</html>
Live Preview