Functions.php von WordPress

Die functions.php (oder function.php) ist eine mächtige Datei, übernimmt sie doch die Allmacht über die Funktionen deines WordPress. Klingt etwas übertrieben, aber du wirst in den nächsten Minuten und Zeilen sehen, dass dies näher an der Realität ist, als dir im Moment erscheint.

Die Namen functions.php und function.php werden synonym verwendet. Im WordPress-Umfeld allerdings findet sich die Plural-Version: functions.php.

Was ist die functions.php Datei in WordPress?

Die function.php Datei ist ein wichtiger Bestandteil jedes WordPress Themes und dient dazu, die Funktionalität des Themes durch eigene Funktionen zu erweitern. Sie befindet sich im Ordner wp-content/themes/[theme-name]/ und kann direkt im Theme-Editor in der WordPress-Administration, über einen FTP-Client oder mittels Texteditor auf dem lokalen Rechner bearbeitet werden.

Änderungen, die du innerhalb der functions.php vornimmst, sind live auf deiner Website aktiv. Daher erstelle vor jeder Bearbeitung eine Sicherung der Datei oder nimm Änderungen auf einer Test-Installation vor.

Es ist jedoch wichtig, vor jeder Bearbeitung eine Sicherung der Datei zu erstellen und Veränderungen – im Idealfall – auf einer Test-Installation zu testen.

Die PHP-Datei wird automatisch beim Laden jeder (Unter)seite deiner WordPress-Website aufgerufen. Die darin befindlichen Funktionen und Hooks kannst du individuell definieren, um dein Theme zu erweitern und anzupassen.

Wie wird die functions.php Datei bearbeitet?

Du kannst die functions.php Datei über mehrere Arten editieren.

  • Theme-Datei-Editor

Eine Möglichkeit ist es, den Theme-Datei-Editor in der WordPress-Administration, also deinem Backend zu verwenden. Den Theme-Editor rufst du über das Menü „Design“ auf und anschließend kannst du deine PHP-Datei direkt im Browser bearbeiten. Beachte, dass du bei einem Fehler evtl. keine Möglichkeit mehr hast diesen Editor zu verwenden. Stelle deshalb sicher, dass du auch per (S)FTP an die Datei kommst und sie so wieder korrigieren kannst!

  • FTP-Client

Komfortabler empfinde ich die Verwendung eines FTP-Clients, mit dem du direkt auf die Dateien deines Server zugreifst. Du kannst damit auf alle Dateien deines WordPress zugreifen und sie entweder lokal auf deinem Computer herunterladen, Änderungen vornehmen und sie im Anschluss wieder auf den Server übertragen. Oder du änderst sie direkt auf dem Server ab. Backup nicht vergessen.

  • Texteditor, Code-Editor oder IDE

In irgendeiner Form wird zur Bearbeitung immer ein Editor verwendet. Möchtest du deinen angestammten Editor zur Bearbeitung nutzen, lädst du dir die functions.php Datei vom Server herunter, bearbeitest diese und lädst sie im Anschluss wieder hoch. Editoren können sich unterscheiden. Während ein einfacher Texteditor dir zwar den Inhalt der Datei anzeigt, bekommst du mit einem Code-Editor bereits die Syntax angezeigt. Das erleichtert dir die Bearbeitung ungemein, da du dich besser orientieren kannst und so zw. Text und Code besser unterscheidest. Eine IDE wird bei umfangreicheren Code wichtig, da sie weitere Funktionen zur Bearbeitung bietet.

Wie du die functions.php Datei sicherst

Eine wichtige Maßnahme, bevor Veränderungen an der functions.php Datei durchgeführt werden, ist das Erstellen einer Sicherungskopie der aktuellen Datei. So kannst du im Notfall auf die ursprüngliche Datei zurückgreifen und fehlerhafte Änderungen rückgängig machen. Lade hierzu die Datei über einen FTP-Client herunter und speichere sie dir in einem geeigneten Ordner ab. Alternativ kannst du ein Backup-Plugin verwenden, welches automatisch Sicherungen erstellt.

Fehlerbehebung in der functions.php

Wenn nach der Bearbeitung der functions.php Fehler auftreten, kann es schwierig sein, die Ursache des Problems zu finden. Im Notfall kannst du immer deine gesicherte Datei einspielen. Dann verlierst du allerdings die geplanten Veränderungen.

Eine Methode um Fehler zu beheben, ist das Durchsuchen des Error Logs auf dem Server. Meist enhält dieser einen Hinweis auf den Fehler und den Ort in Form eines Dateinamens und Zeile des fehlerhaften Codes. Auch das deaktivieren von Plugins und Themes kann helfen, um festzustellen, ob ein bestimmtes Element die Fehler verursacht. Es ist auch hilfreich, die letzten Änderungen in der functions.php Datei zu überprüfen und eventuell fehlerhafte Code-Snippets zu entfernen. Ansonsten kannst du dich an WordPress-Community oder einen Entwickler wenden, um Hilfe bei der Fehlerbehebung zu erhalten.

Was sind die Vorteile der Verwendung der functions.php?

Die Verwendung der functions.php ermöglicht es dir, dein Theme an deine Bedürfnisse anzupassen und zu erweitern ohne, dass du das gesamte Theme bearbeiten musst. Du kannst zum Beispiel deine eigenen Funktionen hinzufügen, Hooks und Filter verwenden, um Code zu organisieren und zu strukturieren. Es ist jedoch wichtig, sorgfältig zu planen und zu testen, bevor Änderungen live geschaltet werden. Es ist auch wichtig, darauf zu achten, dass der Code, der in die functions.php aufgenommen wird, gut dokumentiert ist, um Fehler zu vermeiden und zukünftige Wartung zu erleichtern.

Kein Vorteil ohne Nachteil

Änderst du dein Theme, musst du deine Änderungen und Funktionen ebenfalls übernehmen. Hierfür gibt es eine elegante Lösung via custom functions. Gemeint ist hierbei ein seitenspezifisches Plugin, in der all deine individuellen Funktionen beheimatet sind. Sozusagen dein persönlicher Küchenschrank. Hier befinden sich all deine Gewürze (Code-Snippets) und Streuer (Shortcodes) auf die du nicht mehr verzichten magst.

Was kannst du mit der functions.php bearbeiten?

In der functions.php kannst du zahlreiche Anpassungen vornehmen, damit die Funktionalität deines Themes erweitert wird. Einige Beispiele hierfür sind:

  • Anpassung des HTML-Heads: Hierbei können Meta-Tags, wie z.B. Titel und Beschreibung, hinzugefügt oder verändert werden.
  • Registrierung von zusätzlichen Navigationsmenüs: Hierbei können eigene Navigationsmenüs erstellt und in die Website integriert werden.
  • Einbindung von Scripts und Stylesheets: Du kannst eigene Scripts und Stylesheets hinzufügen, um z.B. bestimmte Funktionen oder Designelemente anzeigen zu lassen.
  • Erweiterung von WordPress-Funktionen: Du erweiterst bestehende WordPress-Funktionen oder veränderst deren Verhalten, beispielsweise um zusätzliche Felder für Beiträge oder Seiten hinzuzufügen.

Was sind deprecated functions?

Deprecated functions (veraltete Funktionen) sind Funktionen, die in früheren Versionen von WordPress verwendet wurden, aber mittlerweile veraltet sind und nicht mehr unterstützt werden. Es ist wichtig, auf diese veralteten Funktionen zu achten und sie durch alternative Funktionen zu ersetzen, um Probleme mit zukünftigen WordPress-Updates zu vermeiden und die Sicherheit und die Leistung der Website zu verbessern.

Ein Beispiel für eine veraltete Funktion in WordPress ist die Funktion „the_category()“, die in früheren Versionen von WordPress verwendet wurde, um die Kategorien eines Beitrags anzuzeigen. In aktuelleren Versionen von WordPress ist die Funktion „get_the_category()“ die empfohlene Alternative.[1]Siehe WordPress Codex: Deprecated Functions

Ein bekanntes Beispiel im Umfeld von GeneratePress ist die Verwendung von „WP ShowPosts“. Diese Funktionalität des früher eigenständigen Plugins wurde in GenerateBlocks „QueryLoop“ integriert. Wir sind derzeit dabei, den Einsatz von WPSP in einzelnen Projekten umzugestalten.

Was sind Code Snippets?

Code Snippets sind kleine Code-Abschnitte, die bestimmte Funktionen hinzufügen oder ändern. Snippets kannst du direkt in die functions.php einfügen oder über ein Code-Management-Plugin verwalten, z.B.:

  • das Hinzufügen von Google Analytics-Tracking-Code
  • das Deaktivieren des Emojis-Support von WordPress
  • das Ändern der Standard-Auszug-Längen (excerpts)

Beispiel Code-Snippets

Einige spannende Anwendungen für Code-Snippets, die du in der functions.php Datei von WordPress verwenden kannst:

  1. Registrierung von benutzerdefinierten Post-Typen: Damit kannst du neue Arten von Inhaltstypen wie z.B. Bücher, Filme oder Produkte sowie Testberichte erstellen.
  2. Registrierung von benutzerdefinierten Taxonomien: Besonders passend, wenn du eigene Post-Typen verwendest und diese Inhalte (neben bestehenden Kategorien und Schlagworten) anderweitig organisieren möchtest.
  3. Registrierung von benutzerdefinierten Feldern: Damit fügst du eigene Felder, wie Preis oder Farbe zu deinen Inhaltstypen hinzu. So können diese Inhalte identisch abgebildet werden.
  4. Anpassung von Login-Seite und Admin-Bereich: Damit individualisierst du die Login-Seite und kannst sogar die Administrationsoberfläche deinen Bedürfnissen anpassen.

Nach dem Hinzufügen des Codes in die functions.php, musst du deine Website im Browser neu laden und siehst so, ob die Änderungen erfolgt sind.

Registrierung von benutzerdefinierten Post-Typen

Das Vorhaben ist, eigene Testberichte zu veröffentlichen. Hierfür soll ein eigener Post-Typ mit individuellen Feldern erzeugt werden. Starten wir mit dem Code-Snippet für den benutzerdefiniert Post-Typ namens „Test“:

function dwp_register_test_post_type() {
    $labels = array(
        'name'               => 'Tests',
        'singular_name'      => 'Test',
        'menu_name'          => 'Tests',
        'name_admin_bar'     => 'Test',
        'add_new'            => 'Neuen hinzufügen',
        'add_new_item'       => 'Neuen Test hinzufügen',
        'new_item'           => 'Neues Test',
        'edit_item'          => 'Test bearbeiten',
        'view_item'          => 'Test ansehen',
        'all_items'          => 'Alle Tests',
        'search_items'       => 'Tests suchen',
        'parent_item_colon'  => 'Übergeordneter Test:',
        'not_found'          => 'Keine Tests gefunden.',
        'not_found_in_trash' => 'Keine Tests im Papierkorb gefunden.'
    );

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'tests' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => null,
        'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
    );

    register_post_type( 'test', $args );
}
add_action( 'init', 'dwp_register_test_post_type' );

Mit diesem Code definierst du zunächst eine Funktion namens „dwp_register_test_post_type“, die die Labels für den Post-Typ „Tests“ festlegt (z.B. der Name im Menü des Administrationsbereichs) und die Argumente für die Registrierung des Post-Typs festlegt (z.B. ob Tests öffentlich sichtbar sein soll oder nicht). Anschließend wird die Funktion mit dem WordPress-Hook „init“ verknüpft, damit die Funktion ausgeführt wird, wenn die Seite geladen wird.

Du kannst die Argumente anpassen, um die Eigenschaften des Post-Typs zu ändern und mehr Labels hinzufügen, um sicherzustellen, dass der Typ in allen Bereichen des Administrationsbereichs korrekt angezeigt wird. Auch kannst du die „supports“-Option anpassen, um die Felder zu definieren, die für den neuen Post-Typ verfügbar sein sollen (z.B. Titel, Editor, Autor, Vorschaubild usw.).

Registrierung von benutzerdefinierten Taxonomien

Um eine benutzerdefinierte Taxonomie in WordPress zu registrieren, kannst Du einen ähnlichen Ansatz wie bei der Registrierung eines benutzerdefinierten Post-Typs verwenden. Hier ist ein Beispiel für ein Code-Snippet, das verwendet werden kann, um eine Taxonomie namens „Genres“ für Bücher zu registrieren:

function dwp_register_book_genre_taxonomy() {
    $labels = array(
        'name'              => 'Genres',
        'singular_name'     => 'Genre',
        'search_items'      => 'Genres suchen',
        'all_items'         => 'Alle Genres',
        'parent_item'       => 'Übergeordnetes Genre',
        'parent_item_colon' => 'Übergeordnetes Genre:',
        'edit_item'         => 'Genre bearbeiten',
        'update_item'       => 'Genre aktualisieren',
        'add_new_item'      => 'Neues Genre hinzufügen',
        'new_item_name'     => 'Name des neuen Genres',
        'menu_name'         => 'Genres',
    );

    $args = array(
        'hierarchical'      => true,
        'labels'            => $labels,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array( 'slug' => 'book-genre' ),
    );

    register_taxonomy( 'book_genre', array( 'book' ), $args );
}
add_action( 'init', 'dwp_register_book_genre_taxonomy' );

Dieser Code definiert zunächst eine Funktion namens „dwp_register_book_genre_taxonomy“, die die Labels für die Taxonomie „Genres“ festlegt (z.B. der Name der Taxonomie im Menü des Administrationsbereichs) und die Argumente für die Registrierung der Taxonomie festlegt (z.B. ob die Taxonomie hierarchisch sein soll oder nicht). Anschließend wird die Funktion mit dem WordPress-Hook „init“ verknüpft, damit sie ausgeführt wird, wenn die Seite geladen wird.

Du kannst die Argumente anpassen, um die Eigenschaften der Taxonomie zu ändern, und mehr Labels hinzufügen, um sicherzustellen, dass die Taxonomie in allen Bereichen des Administrationsbereichs korrekt angezeigt wird. Du musst auch das Array in register_taxonomy(‚book_genre‘, array(‚book‘), $args); anpassen, falls Du eine andere Taxonomie für einen anderen Post-Type registrieren möchtest.

Registrierung von benutzerdefinierten Feldern

Um ein benutzerdefiniertes Feld in WordPress zu registrieren, kannst Du auch das Advanced Custom Fields (ACF) Plugin verwenden. Mit ACF kannst Du benutzerdefinierte Felder für Post-Typen, Seiten, Benutzer, Taxonomien und sogar für Kommentare erstellen. Wenn Du von PHP-Code nicht abgeschreckt bist, dann ist hier ist ein Beispiel für ein Code-Snippet, das verwendet werden kann, um ein benutzerdefiniertes Feld namens „Preis“ für den Post-Typ „Tests“ in WordPress zu registrieren:

function add_test_price_field() {
    add_meta_box( 
        'test_price',
        'Preis',
        'test_price_callback',
        'test',
        'side',
        'default'
    );
}
add_action( 'add_meta_boxes', 'add_test_price_field' );

function test_price_callback( $post ) {
    $value = get_post_meta( $post->ID, 'test_price', true );
    echo '<label for="test_price">Preis</label>';
    echo '<input type="text" id="test_price" name="test_price" value="' . esc_attr( $value ) . '" size="25" />';
}

function save_test_price_data( $post_id ) {
    if ( array_key_exists( 'test_price', $_POST ) ) {
        update_post_meta($post_id, 'test_price', sanitize_text_field( $_POST['test_price'] ) );
}
}
add_action( 'save_post', 'save_test_price_data' );

Dieser Code definiert zunächst eine Funktion namens „add_test_price_field“, die das benutzerdefinierte Feld „Preis“ für den Post-Typ „Tests“ registriert, indem eine Meta-Box erstellt wird.

Die Funktion „test_price_callback“ wird verwendet, um den Inhalt der Meta-Box anzuzeigen und den aktuellen Wert des Feldes zu laden, falls vorhanden.

Die Funktion „save_test_price_data“ wird verwendet, um die Daten des benutzerdefinierten Feldes zu speichern, wenn ein Beitrag gespeichert oder aktualisiert wird.

Es ist wichtig darauf zu achten, dass du neben den Namen für dein benutzerdefiniertes Feld, auch die ID sowie den Namen in den Eingabe-Feldern anpassen musst, solltest du weitere eigene Felder verwenden wollen.

Anpassung von Login-Seite und Admin-Bereich

Um Anpassungen an deiner Login-Seite in WordPress vorzunehmen, kannst du verschiedene Methoden verwenden. Eine Möglichkeit ist, ein eigenes Login-Template zu erstellen und es in deinem Theme zu verwenden:

function dwp_custom_login_template() {
    $template = locate_template( 'custom-login.php' );
    if ( !empty( $template ) ) {
        return $template;
    } else {
        return plugin_dir_path( __FILE__ ) . 'custom-login.php';
    }
}
add_filter( 'login_template', 'dwp_custom_login_template' );

Dieser Code definiert eine Funktion namens „dwp_custom_login_template“, die prüft, ob es eine Datei namens „custom-login.php“ im aktuellen Theme gibt. Wenn ja, wird diese Datei verwendet, andernfalls wird die Datei „custom-login.php“ aus dem aktuellen Plugin-Verzeichnis verwendet.

Du musst die Datei „custom-login.php“ erstellen und es in den Root-Ordner Deines Themes hochladen. In dieser Datei kannst Du die Anpassungen vornehmen, die Du benötigst, z.B. das Hinzufügen von benutzerdefinierten Feldern, Ändern des Styles oder Hinzufügen von JavaScript.

Eine andere Möglichkeit ist, benutzerdefinierte Styles und JavaScript hinzuzufügen, indem man die entsprechenden Hooks verwendet. Hier ist ein Beispiel für ein Code-Snippet, das Du verwenden kannst, um eine benutzerdefinierte CSS-Datei hinzuzufügen:

function dwp_custom_login_styles() {
    wp_enqueue_style( 'custom-login', get_stylesheet_directory_uri() . '/custom-login.css' );
}
add_action( 'login_enqueue_scripts', 'dwp_custom_login_styles' );

Dieser Code verwendet den Hook „login_enqueue_scripts“, um eine CSS-Datei namens „custom-login.css“, die sich im Verzeichnis des aktuellen Themes befindet, zu laden. Du musst die Datei „custom-login.css“ erstellen und sie in das Hauptverzeichnis deines Themes hochladen. Falls du es woanders hochladen möchhtest, musst du den Pfad der Datei entsprechend anpassen.

Hier noch ein Code-Snippet, um ein benutzerdefiniertes Logo hinzuzufügen:

/* Login-Bereich mit individuellem Logo versehen */
function dwp_custom_login_logo() {
    echo '<style type="text/css">
        #login h1 a {
            background-image: url('. get_stylesheet_directory_uri() . '/images/logo-deinwp.png) !important;
            background-size: contain !important;
            width: 100% !important;
        }
    </style>';
}
add_action( 'login_head', 'dwp_custom_login_logo' );

Dieser Code verwendet den Hook „login_head“, um ein benutzerdefiniertes CSS hinzuzufügen, welches das Standard-Logo durch ein eigenes ersetzt, welches sich im Unterordnerrdner „images“ deines Themes befindet und heißt „logo-deinwp.png“. Du musst das gewünschte Logo hochladen und den korrekten Pfad hinterlegen, damit die Datei geladen werden kann.

Das „!important“ in den CSS-Regeln ist dazu da, sicherzustellen, dass diese Regeln Vorrang vor anderen CSS-Regeln haben, die möglicherweise dasselbe Element betreffen. In diesem Fall wird damit sichergestellt, dass das benutzerdefinierte Logo immer angezeigt wird und nicht von anderen CSS-Regeln überschrieben wird.

Es gibt jedoch auch Möglichkeiten, das „!important“ zu umgehen, indem man spezifischere CSS-Regeln verwendet. Eine Möglichkeit wäre es, die ID oder weitere Elternklassen des Elements, das das Logo enthält, in den CSS-Regeln zu verwenden, anstatt nur das Element selbst.

Hier ist ein Beispiel, wie man es machen kann ohne !important zu nutzen:

#login h1 a {
    background-image: url('. get_stylesheet_directory_uri() . '/images/custom-logo.png);
    background-size: contain;
    width: 100%;
}

In diesem Beispiel werden die Regeln auf das Element mit der ID „login“ und dem Kindelement „h1 a“ angewendet. Dadurch haben diese Regeln eine höhere spezifische als die Regeln, die nur das Element „a“ betreffen, und werden daher nicht von anderen Regeln überschrieben.

Es gibt jedoch auch Fälle, wo es trotzdem erforderlich sein kann !important; zu verwenden, da es möglicherweise andere CSS-Regeln gibt, die eine höhere spezifische haben und die Regeln überschreiben würden.

Auch gibt es Plugins, die es ermöglichen, die Login-Seite anzupassen, ohne Code zu schreiben, wenn du das bevorzugst.

Verwendung von Plugins und Themes

Während die function.php Datei viele Möglichkeiten bietet, das Theme anzupassen und zu erweitern, existieren auch viele Plugins und Themes, die bereits nützliche Funktionen und Anpassungen enthalten. Du kannst so auch prüfen, ob es bereits ein Plugin oder Theme gibt, das die gewünschte Funktionalität bereitstellt. So lassen sich Dopplungen und unnötiger Code vermeiden. Allerdings auf Grundlage eines weiteren Plugins und hier spielt unsere Philosophie eine Rolle.

Best Practices für die functions.php

Es gibt einige Best Practices, die du bei der Verwendung der functions.php beachten solltest, um Probleme zu vermeiden und die Leistung deiner Website zu verbessern. Dazu gehört es,

  • den Code gut strukturiert
  • und gut dokumentiert zu halten,
  • veraltete Funktionen zu vermeiden
  • und regelmäßig zu überprüfen, ob es bessere Alternativen gibt.
  • Es ist auch wichtig, die Website regelmäßig zu sichern
  • und Änderungen auf einer Test-Installation zu testen, bevor sie live geschaltet werden.

Weitere Fragen mit kurzen Antworten

Was ist der Unterschied zwischen functions.php und function.php?

Man möchte glauben, es gibt nur die functions.php, weil diese immerzu erwähnt wird. Aber es gibt keinen Unterschied zwischen functions.php und function.php, beide Begriffe beziehen sich auf dieselbe Datei. In einigen Themes wird die Datei „functions.php“ genannt, in anderen Themes „function.php“. Beide Dateien enthalten jedoch dieselben Funktionen und Anpassungen für das Theme. Üblicherweise wird aber eher die functions.php verwendet.

Wo findest du die functions.php Datei?

Sie ist Teil des Theme-Verzeichnisses in deiner WordPress-Installation. Daher findest du sie meist im Verzeichnis „wp-content/themes/dein-theme-name“, wobei „dein-theme-name“ der Name des aktuell verwendeten Themes ist. Damit du nicht die Original-Datei überschreibst, solltest du ein Child-Theme anlegen und dort eine eigene functions.php Datei erstellen, die du dann bearbeitest.

Würde eine eigene functions.php in meinem Child Theme zusätzlich zu der im Haupt-Theme berücksichtigt werden?

Genau deshalb legst du die Datei in deinem Child-Theme ab. Also ja, sie wird neben der des Eltern-Themes zusätzlich berücksichtig und verwendet.

Quellen und Fußnoten[+]

Erkunde weitere Beiträge

Schreibe einen Kommentar