Appearance
Kapitel 2: Frontend-Basics und WordPress-Anbindung
2.1 Frontend-Technologien (HTML/CSS/JS) in WordPress-Themes
HTML in WordPress-Themes
In WordPress-Themes wird HTML in PHP-Dateien eingebettet.
Beispiel: header.php
php
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo('charset'); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php wp_title('|', true, 'right'); ?></title>
<?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<header class="site-header">
<div class="container">
<div class="site-branding">
<h1 class="site-title">
<a href="<?php echo esc_url(home_url('/')); ?>">
<?php bloginfo('name'); ?>
</a>
</h1>
<p class="site-description"><?php bloginfo('description'); ?></p>
</div>
</div>
</header>Wichtige Punkte:
<?php ... ?>ist PHP-Code, der dynamisch HTML generiertbloginfo()ist eine WordPress-Funktion, die Website-Informationen ausgibtwp_head()undwp_footer()sind Pflicht-Hooks für Plugins und Styles
CSS in WordPress-Themes
CSS wird in WordPress-Themes in der style.css Datei definiert.
Beispiel: style.css (Theme-Informationen oben)
css
/*
Theme Name: Mein Erstes Theme
Theme URI: https://example.com/mein-theme/
Description: Ein einfaches WordPress-Theme für Einsteiger
Author: Ihr Name
Author URI: https://example.com
Version: 1.0.0
License: GNU General Public License v2 or later
Text Domain: mein-theme
Tags: blog, custom-logo, custom-menu
*/Dann folgt das eigentliche CSS:
css
/* Reset */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* Container */
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
}
/* Header */
.site-header {
background-color: #1a73e8;
color: white;
padding: 20px 0;
}
.site-title {
font-size: 2rem;
}
.site-title a {
color: white;
text-decoration: none;
}
.site-description {
font-size: 1rem;
opacity: 0.8;
}JavaScript in WordPress-Themes
JavaScript sollte nicht direkt in HTML eingebettet werden, sondern über wp_enqueue_script() eingebunden werden (siehe Abschnitt 2.3).
Beispiel: script.js
javascript
// Navigation Toggle (Mobile)
document.addEventListener('DOMContentLoaded', function() {
const menuToggle = document.querySelector('.menu-toggle');
const mainMenu = document.querySelector('.main-navigation ul');
if (menuToggle) {
menuToggle.addEventListener('click', function() {
mainMenu.classList.toggle('active');
});
}
});2.2 WordPress Template-Tags vs. HTML-Tags (Kern: Dynamische Inhaltswiedergabe)
Was sind Template-Tags?
Template-Tags sind PHP-Funktionen, die WordPress bereitstellt, um dynamische Inhalte anzuzeigen.
Unterschied: HTML vs. Template-Tags
| HTML (Statisch) | WordPress (Dynamisch) |
|---|---|
<title>Meine Website</title> | <?php wp_title(); ?> |
<h1>Willkommen!</h1> | <?php the_title(); ?> |
<p>Hier ist mein Text.</p> | <?php the_content(); ?> |
<a href="/about">Über uns</a> | <?php echo get_permalink(get_page_by_path('about')); ?> |
Häufig verwendete Template-Tags
1. Website-Informationen
php
<?php bloginfo('name'); ?> // Website-Titel
<?php bloginfo('description'); ?> // Website-Untertitel
<?php bloginfo('charset'); ?> // Zeichenkodierung (z.B. UTF-8)
<?php bloginfo('language'); ?> // Sprache (z.B. de-DE)
<?php echo home_url('/'); ?> // Startseiten-URL
<?php echo get_stylesheet_uri(); ?> // URL zur style.css2. Beitragsinformationen (innerhalb der Loop)
php
<?php the_title(); ?> // Beitragstitel
<?php the_content(); ?> // Beitragsinhalt
<?php the_excerpt(); ?> // Beitragsauszug
<?php the_permalink(); ?> // Beitrags-URL
<?php the_author(); ?> // Autorname
<?php the_date(); ?> // Veröffentlichungsdatum
<?php the_category(); ?> // Kategorien
<?php the_tags(); ?> // Schlagworte
<?php comments_number(); ?> // Kommentaranzahl3. Navigation
php
<?php wp_nav_menu(); ?> // Navigationsmenü anzeigen
<?php previous_post_link(); ?> // Link zum vorherigen Beitrag
<?php next_post_link(); ?> // Link zum nächsten Beitrag
<?php posts_nav_link(); ?> // Navigation zwischen BeitragsseitenDie WordPress-Loop (Schleife)
Die Loop ist das Herzstück von WordPress. Sie durchläuft alle Beiträge und zeigt sie an.
Grundstruktur der Loop:
php
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<!-- Hier werden die Beitragsdaten angezeigt -->
<h2><?php the_title(); ?></h2>
<div class="entry-content">
<?php the_content(); ?>
</div>
<?php endwhile; ?>
<?php else : ?>
<p>Keine Beiträge gefunden.</p>
<?php endif; ?>Erklärung:
have_posts(): Prüft, ob Beiträge vorhanden sindwhile (have_posts()): Schleife durch alle Beiträgethe_post(): Bereitet den aktuellen Beitrag für Template-Tags vorthe_title(),the_content(): Zeigen Beitragsdaten an
2.3 CSS/JS-Dateien in WordPress korrekt einbinden
⚠️ Warnung: Binden Sie CSS/JS niemals direkt in HTML ein (z.B. <link rel="stylesheet" href="style.css">). Dies kann zu Konflikten mit Plugins führen!
Das korrekte Verfahren: wp_enqueue_script() und wp_enqueue_style()
WordPress stellt Funktionen bereit, um Stylesheets und Skripte sicher und konfliktfrei einzubinden.
Schritt 1: functions.php erstellen
Die functions.php ist die zentrale Datei für Theme-Funktionen.
Beispiel: functions.php
php
<?php
/**
* Mein Theme - Funktionen und Definitionen
*/
// Stylesheets und Skripte einbinden
function mein_theme_scripts() {
// CSS einbinden
wp_enqueue_style('mein-theme-style', get_stylesheet_uri(), array(), '1.0.0');
// Zusätzliche CSS-Dateien einbinden
wp_enqueue_style('mein-theme-custom', get_template_directory_uri() . '/css/custom.css', array(), '1.0.0');
// JavaScript einbinden
wp_enqueue_script('mein-theme-script', get_template_directory_uri() . '/js/script.js', array('jquery'), '1.0.0', true);
}
add_action('wp_enqueue_scripts', 'mein_theme_scripts');Erklärung der Parameter:
wp_enqueue_style($handle, $src, $deps, $ver, $media)
$handle: Eindeutiger Name (Slug)$src: URL zur CSS-Datei$deps: Abhängigkeiten (Array)$ver: Versionsnummer (für Cache-Busting)$media: Medientyp (z.B.screen,print,all)
wp_enqueue_script($handle, $src, $deps, $ver, $in_footer)
$handle: Eindeutiger Name (Slug)$src: URL zur JS-Datei$deps: Abhängigkeiten (z.B.array('jquery'))$ver: Versionsnummer$in_footer:true= vor</body>einfügen (empfohlen für Performance)
Schritt 2: Hooks verwenden
Wichtige Hooks:
wp_enqueue_scripts: Für Frontend-Styles/Skripteadmin_enqueue_scripts: Für Admin-Bereichlogin_enqueue_scripts: Für Login-Seite
Beispiel:
php
// Falsch ❌
add_action('init', 'mein_theme_scripts'); // Funktioniert, aber nicht empfohlen
// Richtig ✅
add_action('wp_enqueue_scripts', 'mein_theme_scripts');Schritt 3: Pfade korrekt angeben
| Funktion | Rückgabewert |
|---|---|
get_template_directory_uri() | URL zum Parent-Theme-Verzeichnis |
get_stylesheet_directory_uri() | URL zum Child-Theme-Verzeichnis (oder Parent, wenn kein Child) |
get_template_directory() | Pfad zum Parent-Theme-Verzeichnis |
get_stylesheet_directory() | Pfad zum Child-Theme-Verzeichnis |
Beispiel:
php
// Für Parent-Themes:
wp_enqueue_style('my-style', get_template_directory_uri() . '/css/style.css');
// Für Child-Themes (um CSS zu überschreiben):
wp_enqueue_style('parent-style', get_template_directory_uri() . '/style.css');
wp_enqueue_style('child-style', get_stylesheet_directory_uri() . '/style.css', array('parent-style'));2.4 Einsteiger-Wissenswertes: PHP-Basissyntax (Minimaler Einstieg)
Sie benötigen keine tiefgehenden PHP-Kenntnisse, um WordPress-Themes zu erstellen. Hier sind die Grundlagen, die Sie benötigen:
1. PHP-Tags
php
<?php
// PHP-Code hier
?>In WordPress-Dateien sehen Sie oft:
php
<?php the_title(); ?> <!-- Kurzform: PHP-Code ausführen -->2. Variablen
php
$name = 'WordPress';
echo $name; // Gibt "WordPress" aus3. Arrays
php
$farben = array('Rot', 'Grün', 'Blau');
echo $farben[0]; // Gibt "Rot" aus
// Assoziative Arrays
$person = array(
'name' => 'Max',
'alter' => 30
);
echo $person['name']; // Gibt "Max" aus4. Funktionen
php
function begruessung($name) {
return 'Hallo, ' . $name . '!';
}
echo begruessung('Welt'); // Gibt "Hallo, Welt!" aus5. Bedingte Anweisungen
php
if (is_user_logged_in()) {
echo 'Willkommen zurück!';
} else {
echo 'Bitte loggen Sie sich ein.';
}6. Schleifen
php
// For-Schleife
for ($i = 0; $i < 5; $i++) {
echo $i;
}
// Foreach-Schleife
$array = array('a', 'b', 'c');
foreach ($array as $wert) {
echo $wert;
}7. WordPress-spezifische PHP-Konzepte
add_action() und add_filter()
php
// Aktion hinzufügen
add_action('wp_head', 'meine_funktion');
// Filter hinzufügen
add_filter('the_content', 'mein_filter');get_template_part()
php
// Teile eines Templates laden
get_template_part('template-parts/content', 'page');
// Lädt: template-parts/content-page.php📝 Übung 2: Template-Tags ausprobieren
Ziel: Erstellen Sie eine index.php, die die WordPress-Loop verwendet.
Schritte:
- Erstellen Sie einen Ordner
mein-themeinwp-content/themes/ - Erstellen Sie
style.cssmit Theme-Informationen - Erstellen Sie
index.phpmit folgendem Inhalt:
php
<?php get_header(); ?>
<main id="main" class="site-main">
<?php if (have_posts()) : ?>
<div class="posts-container">
<?php while (have_posts()) : the_post(); ?>
<article <?php post_class(); ?>>
<h2 class="entry-title">
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</h2>
<div class="entry-content">
<?php the_excerpt(); ?>
</div>
</article>
<?php endwhile; ?>
</div>
<?php else : ?>
<p>Keine Beiträge gefunden.</p>
<?php endif; ?>
</main>
<?php get_footer(); ?>- Aktivieren Sie das Theme im WordPress-Dashboard
- Überprüfen Sie die Startseite
✅ Zusammenfassung
In diesem Kapitel haben Sie gelernt:
- ✅ Wie HTML, CSS und JavaScript in WordPress-Themes verwendet werden
- ✅ Den Unterschied zwischen statischem HTML und dynamischen Template-Tags
- ✅ Die WordPress-Loop (Schleife) zu verwenden
- ✅ CSS und JavaScript korrekt in WordPress einzubinden (nicht direkt!)
- ✅ Grundlegende PHP-Syntax für WordPress-Theme-Entwicklung
Nächstes Kapitel: Wir lernen die Theme-Dateistruktur im Detail kennen.
