WordPress mit Code-Schnipsel ohne Fehler erweitern
WordPress & Co

Hilfe mein Blog ist kaputt oder WordPress mit Code-Schnipsel ohne Fehler erweitern

Wenn ich für jedes vergessene Semikolon einen Euro bekommen hätte, wäre ich jetzt reich!

Genauso oder ähnlich denken Programmierer und wie sieht es da erst bei Laien aus. Die verzweifeln meistens, da sie gar nicht wissen, dass nur ein kleines Semikolon für das Drama verantwortlich ist. Ihr bekommt von den Profis (hey, ja auch von mir) Ratschläge wie: „Füge den Code doch einfach in die functions.php ein.“ oder „Die drei Zeilen stellst du ans Ende der functions.php„. Und du machst das ganz brav und hast eine weiße WordPress-Seite, denn anscheinend ist es doch nicht so einfach. Ich greife dir heute mal unter die Arme und zeige dir die häufigsten Fehler, die dir passieren können und sicher auch werden. und natürlich auch wie du sie wieder los wirst.

  1. Außerhalb der php-Tags einfügen
  2. Verschachtelte php-Tags erzeugen
  3. Innerhalb von Funktionen einfügen
  4. Fehlerhaftes Kopieren des Codes

Aber fangen wir zuerst mit ein paar (ich verspreche dir, es sind wirklich ganz wenig) Grundlagen an.

Wo ist die functions.php?

Wir reden hier ja von WordPress und die Erweiterung von bestehenden Themes. Gleich am Anfang an ganz wichtiger Tipp:

Erweitere nur ein Theme und ändere NIEMALS die Originaldateien von WordPress.

Denn sobald du Dateien von WordPress selbst änderst, sind sie beim nächsten Update sicher wieder überschrieben. Und auch noch einen Tipp gebe ich dir gerne gleich am Anfang deines Weges mit:

Arbeite immer mit einem Child-Theme!

Hier gilt das gleiche! Sobald du im Original-Theme arbeitest gehen alle Änderungen bei einem Update verloren. Wenn du absolut keine Ahnung hast wie man ein Child-Theme anlegt, habe ich dafür einen Beitrag geschrieben um dir das Erstellen eines Child-Themes einfach zu erklären. Und genau im Theme Ordner ist auch diese berüchtigte Datei, du findest sie unter /wp-content/themes/dein-theme/functions.php. Diese Datei ist für die Themefunktionen zuständig. Also alle Dinge die nur dein Theme kann und nicht direkt von WordPress zur Verfügung gestellt werden. Und daher wird sie auch gerne für jede Art der Erweiterung des Themes und der Funktionalität verwendet.

Wie schaut PHP-Code aus?

Wenn du tiefer in das Thema einsteigen willst, habe ich früher, als der Guru 2.0 noch nicht in Pension war, eine Serie von Beiträgen zum Lernen von PHP geschrieben. Falls du aber nur schnell einen Überblick und Hilfestellung brauchst, bekommst du hier einen wirklich kurzen Einstieg.

Schauen wir einmal auf einen eine typische functions.php, oder besser auf einen Auszug davon. Denn meistens ist der Code viel länger als hier gezeigt.

<?php 
/*****
 * Magical Theme Functions
 * @author Clemens Gull aka The Magical Digtial Nomad
 * @package WordPress
 * @subpackage TMDN WordPress Theme
 *****/

// Maximum allowed width of content within the theme.
if (!isset($content_width)) {$content_width = 770;}

/*****
 * Setup Theme Functions
 *****/
if (!function_exists('tmdn_theme_setup')):
  function tmdn_theme_setup() {
    load_theme_textdomain('tmdn', get_template_directory() . '/lang');
    add_theme_support('automatic-feed-links');
    add_theme_support('post-thumbnails');
    // Define post thumbnail size.
    set_post_thumbnail_size(260, 180);
    add_image_size('bootstrap-small', 300, 200);
    add_image_size('bootstrap-medium', 360, 270);
    add_theme_support('post-formats', 
                      array('aside', 'image', 
                            'gallery', 'link', 
                            'quote', 'status', 
                            'video', 'audio', 'chat'));
    register_nav_menus(array('main-menu' => __('Main Menu', 'tmdn'),
                             'footer-menu' => __('Footer Menu', 'tmdn'),
                             'header-menu' => __('Header Menu', 'tmdn')));
  }
endif;
add_action('after_setup_theme', 'tmdn_theme_setup');

/*****
 * Load CSS styles for theme
 *****/
function tmdn_styles_loader() {
  wp_enqueue_style('bicbswp-style', get_template_directory_uri().'/style.css');
  wp_enqueue_style('bicbswp-default', get_stylesheet_uri());
}
add_action('wp_enqueue_scripts', 'tmdn_styles_loader');

//...

// Replaces the excerpt "more" text by a link
function tmdn_excerpt_more( $more ) {
  return ' ... <br/><a class="read-more" href="'
         .get_permalink(get_the_ID()).'">'
         .__('Read More', 'tmdn').'</a>';      
}
add_filter( 'excerpt_more', 'tmdn_excerpt_more' );
?>

Das schaut jetzt alles komplizierter aus, als es wirklich ist. Für dieses Mal sind die erste und die letzte Zeile wichtig. Da findest du den öffnenden <?php und schließenden ?> Tag für PHP. Dadurch weiß der PHP-Interpreter welcher Teil der Datei für ihn interessant ist und verarbeitet werden muss. Falls du jetzt wissen willst, wie eine Webseite funktioniert, kannst du das auch nachlesen.

Die üblichen Fehler beim Einfügen von Code-Schnipsel in PHP

Wichtig ist, dass die meisten Fehler passieren, da du den Code schlicht und ergreifend an der falschen Stelle einfügst. Also schauen wir mal nach, welche falschen Orte es in der functions.php (gilt aber auch für alle anderen PHP-Dateien) geben kann.

Einfügen außerhalb der php-Tags

Vorher haben wir gerade die öffnenden und schließenden PHP-Tags kennengelernt. Jetzt kommt es vor, dass du in den Weiten des Netzes auf einen Code-Schnipsel stößt und ihn unbedingt brauchst. Und dann steht bei den Anweisungen auf der Webseite für den Code etwas ähnliches:

Füge den Code am Ende der functions.php ein.

Und da du die Anweisung brav befolgt sieht deine functions.php danach so aus.

...
add_filter( 'excerpt_more', 'new_excerpt_more' );
?>
//MetaBox hinzufuegen
function tmdn_AddMetaBox_Products() {
  wp_enqueue_style('my_meta_css', MY_THEME_PATH.'/metabox_products.css');
  add_meta_box('meta_box_products', 'Informationen zum Produkt', 'tmdn_SetupMetaBox_Products', 'products', 'normal', 'high');
  add_action('save_post','tmdn_SaveMetaBox_Products');
}
add_action('admin_init', 'tmdn_AddMetaBox_Products');

Du siehst den Fehler in Zeile #3? Genau, der Code ist einfach nach dem schließenden Tag eingefügt worden und führt daher zu einem Fehler. Genauso sieht es aber auch umgekehrt aus.

//MetaBox hinzufuegen
function tmdn_AddMetaBox_Products() {
  wp_enqueue_style('my_meta_css', MY_THEME_PATH.'/metabox_products.css');
  add_meta_box('meta_box_products', 'Informationen zum Produkt', 'tmdn_SetupMetaBox_Products', 'products', 'normal', 'high');
  add_action('save_post','tmdn_SaveMetaBox_Products');
}
add_action('admin_init', 'tmdn_AddMetaBox_Products');
<php 
/*****
 * Magical Theme Functions
...

Auch hier siehst du sofort den Fehler in Zeile 7 und 8. Der Code ist vor dem öffnenden PHP-Tag eingefügt worden und das bringt den PHP-Interpreter sofort ins Stolpern und dir eine weiße WordPress-Seite.

Einfügen mit doppelten php-Tags

Auch der zweite Fehler ist sehr beliebt. Meistens ist es typisches Copy-And-Paste und ein wenig Unerfahrenheit der ihn erzeugt. Du surfst wieder einmal durchs Netz (dir muss ja langweilig sein) und findest folgenden Code-Schnipsel:

<?php
//MetaBox hinzufuegen
function tmdn_AddMetaBox_Products() {
  wp_enqueue_style('my_meta_css', MY_THEME_PATH.'/metabox_products.css');
  add_meta_box('meta_box_products', 'Informationen zum Produkt', 'tmdn_SetupMetaBox_Products', 'products', 'normal', 'high');
  add_action('save_post','tmdn_SaveMetaBox_Products');
}
add_action('admin_init', 'tmdn_AddMetaBox_Products');
?>

Und wie immer steht auf der Seite, dass du den Code in deine Themefunktionen einfügen sollst. Und genau das machst du brav und auf einmal schauen deine Themefunktionen so aus:

...
add_filter( 'excerpt_more', 'new_excerpt_more' );
<?php
//MetaBox hinzufuegen
function tmdn_AddMetaBox_Products() {
  wp_enqueue_style('my_meta_css', MY_THEME_PATH.'/metabox_products.css');
  add_meta_box('meta_box_products', 'Informationen zum Produkt', 'tmdn_SetupMetaBox_Products', 'products', 'normal', 'high');
  add_action('save_post','tmdn_SaveMetaBox_Products');
}
add_action('admin_init', 'tmdn_AddMetaBox_Products');
?>
?>

Ich habe dir die fehlerhaften Zeilen markiert und du siehst sehr gut, dass die öffnenden und schließenden php-Tags ineinander verschachtelt sind. Du hast es geschafft ein php-Skript innerhalb eines anderen einzubauen. Für uns ist das schon lesbar, aber der PHP-Interpreter kann es nicht und bricht die Verarbeitung ab. Wenn du hier die Zeile #3 und #11 löscht, funktioniert wieder alles.

Falsch verschachtelter Code

Das ist auch ein häufiger Fehler. Er passiert meistens dann, wenn du dich schon ein wenig sicherer fühlt und den Schnipsel nicht mehr am Ende, sondern an einer bestimmten Position in der functions.php einfügst. Wir verwenden wie immer den Code-Schnipsel für die Meta-Box, den wir bereits kennen und unsere Themefunktionen schauen so aus:

...
  }
endif;
add_action('after_setup_theme', 'tmdn_theme_setup');

/*****
 * Load CSS styles for theme
 *****/
function tmdn_styles_loader() {
  wp_enqueue_style('bicbswp-style', get_template_directory_uri().'/style.css');
  wp_enqueue_style('bicbswp-default', get_stylesheet_uri());
//MetaBox hinzufuegen
function tmdn_AddMetaBox_Products() {
  wp_enqueue_style('my_meta_css', MY_THEME_PATH.'/metabox_products.css');
  add_meta_box('meta_box_products', 'Informationen zum Produkt', 'tmdn_SetupMetaBox_Products', 'products', 'normal', 'high');
  add_action('save_post','tmdn_SaveMetaBox_Products');
}
add_action('admin_init', 'tmdn_AddMetaBox_Products');
}
add_action('wp_enqueue_scripts', 'tmdn_styles_loader');

//...

// Replaces the excerpt "more" text by a link
function tmdn_excerpt_more( $more ) {
  return ' ... <br/><a class="read-more" href="'
         .get_permalink(get_the_ID()).'">'
         .__('Read More', 'tmdn').'</a>';      
}
add_filter( 'excerpt_more', 'tmdn_excerpt_more' );
?>

Du siehst in den Zeilen 12 – 18 das eingefügte Code-Schnipsel. Eigentlich schaut es ganz gut aus, aber… Du bist in der Zeile verrutscht und hast den Code innerhalb einer Funktion eingefügt. Das klappt auch nicht, denn zwischen den geschwungenen Klammern von function ... { ... } darf keine andere Funktion stehen. Und genau das hast du gemacht und bringst damit den PHP-Interpreter zum Stolpern und WordPress zeigt dir eine weiße Seite im Browser an. Einfach den Code ab Zeile 21 einfügen und schon funktioniert wieder alles.

Der falsch kopierte Code-Schnipsel

Gerade wenn du aus dem Browser, Code mit der Maus kopierst, kann es zu diesem Fehler kommen. Du markierst dir den Code, indem du mit der Maus darüber ziehst und übersiehst das erste Zeichen oder die erste Zeile. Oder du markierst das letzte Zeichen die letzte Zeile nicht mit. Im Eifer des Gefechts fällt dir das gar nicht auf und du fügst den Code in die Themefunktionen, zwar an der richtigen Stelle ein, aber eben mit einem fehlenden Zeichen bzw. einer fehlenden Zeile.

...
}
add_action('wp_enqueue_scripts', 'tmdn_styles_loader');

/Meta-Box hinzuefuegen
function tmdn_AddMetaBox_Products() {
  wp_enqueue_style('my_meta_css', MY_THEME_PATH.'/metabox_products.css');
  add_meta_box('meta_box_products', 'Informationen zum Produkt', 'tmdn_SetupMetaBox_Products', 'products', 'normal', 'high');
  add_action('save_post','tmdn_SaveMetaBox_Products');
}
add_action('admin_init', 'tmdn_AddMetaBox_Products');

Hier siehst du die Zeile 5! Es fehlt am Anfang ein Schrägstrich, der nicht mitkopiert wurde. Daher „denkt“ PHP jetzt, dass es ein Befehlszeile ist und nicht mehr eine Bemerkung.

...
}
add_action('wp_enqueue_scripts', 'tmdn_styles_loader');

//Meta-Box hinzuefuegen
function tmdn_AddMetaBox_Products() {
  wp_enqueue_style('my_meta_css', MY_THEME_PATH.'/metabox_products.css');
  add_meta_box('meta_box_products', 'Informationen zum Produkt', 'tmdn_SetupMetaBox_Products', 'products', 'normal', 'high');
  add_action('save_post','tmdn_SaveMetaBox_Products');
}
add_action('admin_init', 'tmdn_AddMetaBox_Products')

Bei diesem Beispiel ist es die letzte Zeile: Es fehlt schlicht und ergreifend ein Semikolon (;). Das ist wahrscheinlich der häufigste Fehler warum PHP-Skripts nicht funktionieren, dieses verdammte Semikolon am Zeilenende.

Ich hoffe ich konnte dir die 4 Fehler

  1. Außerhalb der php-Tags einfügen
  2. Verschachtelte php-Tags erzeugen
  3. Innerhalb von Funktionen einfügen
  4. Fehlerhaftes Kopieren des Codes

ein wenig darstellen und erklären wie du zu einer Lösung – und viel wichtiger, einem wieder funktionierenden Blog – kommst.

Hinterlasse eine Antwort

Deine eMail-Adresse wird nicht veröffentlicht. Pflichtfelder sind mit * markiert.