Zum Inhalt springen
themeforge
DE
Kostenlos starten
Menü

Theme Reference

Theme Panel

Site settings page.

Sections

  • Admin Panel — Gutenberg, admin bar, dashboard
  • Security — XML-RPC, REST API, version hiding
  • Extensions — Forms, SMTP, Telegram, reCAPTCHA
  • WooCommerce — WooCommerce settings
  • Theme Settings — Field backend, migration tools
  • Search — Search configuration

Abfragen

Erstelle wiederverwendbare WP_Query-/get_terms()-Auswahlen. Nutze sie auf zwei Arten: Ruf ein Query-Preset aus einem PHP-Template auf oder häng eine Custom Query über HTML-Attribute an ein Schleifen-Element.

Aus einem PHP-Template (Query Presets)

Erstelle ein Preset im Unter-Tab Post/Term Query Presets, gib ihm einen Query Code und ruf es im Template-Code auf:

  • Posts: $q = new WP_Query(tf_get_query('your-code'));
  • Terms: $terms = tf_get_term_query('your-code');
  • Auto-apply: Binde ein Preset im Tab „Auto-apply“ an ein Beitragstyp- oder Taxonomie-Archiv, und es überschreibt die Hauptabfrage automatisch (über pre_get_posts) — ohne Template-Änderung.

Über HTML-Attribute (Custom Queries)

Benenne eine Abfrage im Unter-Tab Custom Queries / Term Queries und verweise dann auf dem Schleifen-Element darauf — oder schreib die Argumente direkt hinein. Nur das erste Kindelement dient als Wiederholungsvorlage.

  • Benannt: <div wp-select="catalog"> … </div> (Alias: wp-query-name)
  • Inline: <div wp-query="'post_type'=>'product','posts_per_page'=>8">
  • Begriffsliste: <div wp-term-query="'taxonomy'=>'product_cat','parent'=>0"> · wp-term-select="name"
  • WooCommerce: <div wp-product-query="get_related_products(4)">

In der Schleife — Felder

Auf Elementen innerhalb der Schleife gibst du Werte mit WordPress-Attributen oder ACF/SCF-Feld-Attributen aus:

  • WordPress: wp="post-title", wp="post-image", wp="post-link", wp="term-title", wp="term-link"
  • ACF / SCF: fld-text, fld-image, fld-link, fld-loop (Alternatives Format: f_text, f_image, f_loop)

Kompatibilität

Die Runtime liest drei Quellen in Prioritätsreihenfolge: TF-Presets, dann Query Master (ältere importierte Websites), dann die Abfragen des veralteten Konfigurators. Neue Presets werden immer im TF-Speicher gespeichert; vorhandene Daten funktionieren weiterhin.

Eigene Beitragstypen & Taxonomien

Registriere eigene Beitragstypen und Taxonomien direkt im Panel — jede Wiederholer-Zeile entspricht einem WordPress-Registrierungsaufruf, kein Code nötig.

Eigene Beitragstypen

Jede Zeile entspricht register_post_type(). Das Feld „Name“ ist der Beitragstyp-Schlüssel (Kleinbuchstaben Latein, keine Leerzeichen). Leg Plural-/Singular-/Menü-Bezeichnungen, ein Dashicons-Symbol, die unterstützten Funktionen (Titel, Editor, Beitragsbild, …), den Archiv-URL-Slug, REST/Gutenberg, die öffentliche Abfragbarkeit, einen „Öffentliches Archiv“-Schalter (Feed /slug/ für Service-Typen abschaltbar) fest — und optional eine „Archiv-Landingpage“, die das Archiv bearbeitbar macht (siehe Abschnitt „Archiv-Landingpages“ unten).

Eigene Taxonomien

Jede Zeile entspricht register_taxonomy(). Wähl hierarchisch (wie Kategorien) oder flach (wie Schlagwörter), verknüpfe sie mit einem oder mehreren Beitragstypen und leg Slug und REST-Sichtbarkeit fest.

Wie sie zusammenhängen

Neue Beitragstypen und Taxonomien erscheinen automatisch in den Dropdowns der Query-Presets. Permalinks werden beim Speichern aktualisiert. Templates folgen den WordPress-Konventionen: single-{type}.php, archive-{type}.php, taxonomy-{taxonomy}.php.

Archiv-Landingpages

Eine Archiv-URL (Blog, Shop-Katalog, Archiv eines eigenen Beitragstyps) rendert eine LISTE von Beiträgen — sie hat keine eigene Seite, es gibt dort also normalerweise nichts zu bearbeiten. ThemeForge gibt jedem Archiv eine Landingpage: eine echte Seite aus der Seitenliste, deren Felder zum bearbeitbaren Inhalt des Archivs werden (Hero-Titel, Einleitungstext, Bilder, SEO), während der Feed weiterhin die Liste ausgibt. Redakteure ändern das Archiv wie jede andere Seite.

So funktioniert es

Platziere auf der Archivseite deines Webflow-Projekts (archive-post, archive-product, archive-{type}) Feld-Attribute AUSSERHALB der Listenschleife — also außerhalb des Elements mit wp="posts" / wp="products". Diese Felder werden in der Verwaltung automatisch an die Landingpage angehängt und auf der Archiv-URL von ihr gerendert.

  • Außerhalb der Schleife funktioniert jedes Einzelwert-Feld: fld-text, fld-image, fld-link, fld-bg-image, fld-editor und der Rest der fld-*-Familie — plus wp="post-title" und wp="post-content", die Titel und Inhalt der Landingpage selbst ausgeben.
  • Felder INNERHALB der Schleife behalten ihre gewohnte Bedeutung: Sie lesen jeden gelisteten Beitrag, genau wie zuvor.
  • Mehrsprachige Websites lösen die Landingpage pro Sprache automatisch auf (Polylang / WPML): Jede Sprache bearbeitet ihre eigene Übersetzung der Landingpage.
  • SEO: Bei Archiven eigener Beitragstypen speist die Landingpage auch Yoast — das Archiv erhält ihren SEO-Titel und eine korrekte Canonical-URL, auch auf paginierten Seiten.

Blog

Die Blog-Landingpage ist die native WordPress-„Beitragsseite“. Erstelle eine Seite (z. B. /blog/), weise sie unter Einstellungen → Lesen zu, und die außerhalb der Schleife auf dem archive-post-Template platzierten Felder hängen sich an diese Seite — keine weitere Einrichtung nötig.

Konfiguriert unter: Settings → Reading → Beitragsseite
Template: archive-post

WooCommerce-Katalog

Der Shop-Katalog nutzt die WooCommerce-Shop-Seite als Landingpage. Felder außerhalb der Produktschleife auf dem archive-product-Template hängen sich an die Shop-Seite und werden auf der Katalog-URL gerendert.

Konfiguriert unter: WooCommerce → Settings → Products → Shop page
Template: archive-product

Eigene Beitragstypen

Ein Archiv eines eigenen Beitragstyps hat in WordPress keine native Landingpage, also fügt ThemeForge eine hinzu: Erstelle eine Seite, deren URL dem Archiv-Slug entspricht (z. B. /portfolio/ für einen Typ mit Archiv-Slug „portfolio“), und wähl sie in der Zeile dieses Beitragstyps im Theme Panel aus. Die Archiv-URL rendert weiterhin das Feed-Template, die gewählte Seite trägt seine bearbeitbaren Felder. Deklariert das Archiv-Template deines Webflow-Projekts eine Feldgruppe, erstellt (oder übernimmt) ThemeForge die Landingpage automatisch — in jeder Sprache der Website, so wie WooCommerce seine Shop-Seite anlegt.

Konfiguriert unter: Appearance → Theme Panel → Custom Post Types → Zeile deines Beitragstyps → „Archive landing page“
Template: archive-{type}

Die gebundene Seite BESITZT die Archiv-URL: Benenne die Seite um, und das Archiv zieht mit (das Slug-Feld ist ausgeblendet, solange eine Seite gebunden ist). Ohne gebundene Seite kommt der Slug aus dem Theme Panel. Die Seite selbst wird nie direkt angezeigt — sie ist die Bearbeitungsfläche hinter dem Archiv.

Gut zu wissen

  • Gruppenfelder außerhalb der Schleife (Repeater, Gruppe, Flexible Content, Galerie) werden genau wie Einzelwert-Felder von der Landingpage gelesen. Die einzige Ausnahme ist eine Gruppe mit loop-mode="0" — der Logs-Tab des Projekts markiert sie als „archive-scope-unsupported".
  • Ein Feld INNERHALB einer Listenschleife gehört den gelisteten Beiträgen — deklariere es auf dem entsprechenden single-{type}-Template, damit es auf deren Bearbeitungsseiten erscheint.
  • Ist keine Landingpage konfiguriert, geht nichts kaputt: Das Archiv rendert exakt wie zuvor. Die Landingpage lässt sich jederzeit ohne Neugenerierung des Themes hinzufügen.

Forms Extension

Built-in form handling.

Features

  • SMTP email sending
  • reCAPTCHA v3 / v2
  • Telegram notifications
  • Spamschutz ohne Schlüssel — auf neuen Websites aktiv
  • Auto-reply
  • JustValidate client-side validation
  • CPT tf_form_entry — submission storage
  • CSV export

Spamschutz

Funktioniert ohne Schlüssel und externe Dienste. Auf einer neuen Website ist er von Anfang an aktiv; auf einer Website, die bereits Anfragen erhält, schaltest du ihn mit „Grundlegender Spamschutz“ unter Formulare → Einstellungen ein.

  • Sortiert Einsendungen aus, die ein verstecktes Fallenfeld ausfüllen, ohne das Seitenskript eintreffen, schneller gesendet werden, als ein Mensch tippen kann, mehrere Links enthalten oder das Bild-Captcha umgehen. Wie oft eine Adresse senden kann, ist begrenzt.
  • Aussortierte Einsendungen werden nirgendwohin gesendet: Sie liegen 30 Tage im Spam-Ordner unter Einträge, und eine irrtümlich aussortierte lässt sich mit „Kein Spam“ zurückholen.
  • Die eigenen Formulare von WordPress schützt ein separater Schalter „Spamschutz für WordPress-Formulare“, standardmäßig aktiv: Kommentare und Produktbewertungen, Registrierung und Passwort-Zurücksetzung. Ein Kommentar, den ein Bot sendet, ohne die Seite zu öffnen, wird abgelehnt und nirgends gespeichert; ein Grenzfall landet unter Kommentare → Spam; eine verdächtige Registrierung oder Zurücksetzungsanfrage wird mit der Bitte um einen neuen Versuch abgelehnt. Das Anmeldeformular und angemeldete Benutzer werden nicht geprüft.
  • Das Bild-Captcha spricht die Sprache der Seite: Die Texte werden pro Sprache festgelegt, und es zeichnet nur Zeichen, die ein Besucher ohne Umschalten des Tastaturlayouts tippen kann (ukrainische, russische, lateinische Buchstaben oder Ziffern).

Gegen Bots, die gezielt einen Menschen nachahmen, hilft reCAPTCHA mit Google-Schlüsseln — sie wird in denselben Einstellungen aktiviert.

wp-field — ein Feldschlüssel, der Umbenennungen übersteht

Standardmäßig wird ein Formularfeld unter der in Webflow eingegebenen Beschriftung übertragen. Wird diese später umbenannt, passen E-Mail-Vorlage und Weiterleitungszuordnung nicht mehr — und zwar stillschweigend, denn die Anfrage kommt weiterhin an. Markiere das Feld (oder seinen Container mit der Beschriftung), und der Schlüssel hängt nicht mehr von der Beschriftung ab.

<input type="tel" wp-field="phone">

<div class="row" wp-field="phone">
  <label for="tel">Telefon</label>
  <input type="tel" id="tel">
</div>

Der Schlüssel wird beim Generieren des Themes in das Feld geschrieben; danach ist keine Konfiguration nötig. Verwende lateinische Buchstaben, Ziffern, _ und -; vom Formular-System belegte Namen werden abgelehnt und im Projektprotokoll aufgeführt. Felder, deren Name von WordPress oder WooCommerce vorgegeben ist — Kommentare, Bewertungen, Kasse — verwenden ihre eigenen Markierungen.

Engine für benutzerdefinierte Felder

Das Theme speichert benutzerdefinierte Felder über eine ACF-kompatible Engine. Zwei austauschbare Engines teilen sich dieselben Felder und Daten, sodass du ohne Wertverlust wechseln kannst.

Zwei Engines, ein Datenformat

Standard ist Secure Custom Fields — ein kostenloses WordPress.org-Plugin, das sich selbst aktualisiert und alle ACF-PRO-Feldtypen ohne Lizenz bietet. Du bevorzugst dein eigenes lizenziertes ACF PRO? Installiere es, das Theme erkennt es automatisch.

Default: Secure Custom Fields (SCF) — kostenlos, von WordPress.org, automatische Updates
Alternative: Advanced Custom Fields PRO — Deine eigene Lizenz, automatisch erkannt
Switch: Appearance → Theme Panel → Site Settings → Field backend

Mehrsprachige Optionen

Integrierte Mehrsprachunterstützung für Theme-Optionen und Seitenfelder. Aktiviert sich automatisch mit Polylang oder WPML.

Funktionsweise

Das Theme erkennt Polylang oder WPML automatisch und lädt die entsprechende Integration.

  • Automatische Erkennung: Polylang (pll_current_language) oder WPML (ICL_SITEPRESS_VERSION)
  • Sprachspezifische Speicherung: jede Sprache erhält eigene Optionswerte
  • Fallback: leere Sprachfelder erben Werte von „Alle (Standard)"
  • Benutzerdefinierte Flaggen: eigene Sprachflaggen aus der Mediathek hochladen

Optionen nach Sprache verwalten

Verwende die Sprachumschaltung auf der Optionsseite, um Werte für jede Sprache zu bearbeiten.

ActionDescription
„Alle (Standard)"Master-Werte. Werden als Fallback verwendet, wenn eine Sprache keinen eigenen Wert hat.
Bearbeitung pro SpracheWechsle zur Sprache, um deren Werte zu bearbeiten. Leere Felder erben von „Alle".
VererbungLass ein Feld auf der Sprachseite leer, um im Frontend den Wert von „Alle (Standard)" zu verwenden.

Felder automatisch übersetzen

Integrierte maschinelle Übersetzung von Feldwerten. Verfügbar in der Seitenleiste auf Bearbeitungs- und Optionsseiten.

  • „Übersetzen"-Button neben jedem Textfeld
  • „Alle übersetzen" in der Seitenleiste — übersetzt alle Felder auf einmal, auch versteckte Tabs und Repeater
  • Link-Felder werden automatisch übersprungen (Erkennung nach Feldname und URL-Muster)
  • Kein API-Schlüssel erforderlich — nutzt den kostenlosen Google Translate Endpunkt
  • WYSIWYG-Felder (Rich Text) unterstützt — HTML-Struktur bleibt erhalten

Protected Files

These files are preserved during theme updates.

  • user-functions.php — Custom PHP functions
  • css/user.css — Custom CSS styles
  • js/user.js — Custom JavaScript

CSS-Ladereihenfolge: main.css → themeforge.css → user.css.

Import System

Data and media import from pages.json and menus.json.

Import Order (Important!)

  1. Step 1: Upload images (import_images)
  2. Step 2: Import data (import_data)

Images must be uploaded before data import.

Import Actions

ActionDescription
/?action=import_imagesUpload all media files
/?action=import_dataImport all field data
/?action=import_page_media&slug=XUpload media for a specific page
/?action=import_page_data&slug=XImport data for a specific page
/?action=import_menu_dataImport all menus

Quelle des Seitentitels

Beim Erstellen von WordPress-Seiten während des Imports wird der Seitentitel aus dem Quell-HTML in folgender Priorität übernommen:

  1. <meta property="og:title"> — Open Graph
  2. <title> — HTML title tag
  3. Template-Name (z.B. „About" aus page-about)

Image Filename Resolution

The import system resolves image filenames using a fallback chain:

  • URL-decode filename
  • Strip Webflow hash prefix
  • sanitize_file_name() + DB LIKE query

Sprachbezogener Import

Füg &lang=xx hinzu, um Daten für eine bestimmte Sprache zu importieren. Die Import-Metabox auf der Bearbeitungsseite erkennt die Seitensprache automatisch.

/?action=import_page_data&slug=theme-options&lang=en
KontextDescription
Theme-OptionenSpeichert Optionen mit einem Locale-Suffix (options_LOCALE_field). Verwende den Sprachumschalter auf der Optionsseite.
SeitenFindet oder erstellt den Polylang-Übersetzungsbeitrag und importiert Daten dorthin. Originalseite wird unabhängig vom Sprachfilter gefunden.
Import-MetaboxAuf Seiten: erkennt Sprache aus dem Beitrag (pll_get_post_language). Auf Optionen: liest ?lang= aus der URL.

Entwickler-Referenz

Technische Details für Entwickler und KI-Assistenten. HTML-Attribute, Feldtypen, Menüsystem, JavaScript-Hooks, Hilfsfunktionen.

Field Types

ACF-/SCF-Feldtyp-Zuordnung. Jeder Attributtyp ist einem bestimmten HTML-Element zugeordnet.

ACF / SCF TypeElementAttribute Example
textdiv, span, p, h1-h6fld-text="name"
textareadiv, pfld-area="name"
wysiwygdivfld-editor="name"
imageimg (src)fld-image="name"
link / urla (href)fld-link="name"
true_falsewrapper divfld-show="name"
color_pickerany (bg)fld-bg-color="name"
repeaterwrapper divfld-loop="name"
groupwrapper divfld-group="name"
gallerywrapper divfld-gallery="name"
tabcontainer divfld-tab="name"

Field Groups (wp-fields-group)

The wp-fields-group attribute creates field groups in WordPress admin.

Usage

<div wp-fields-group="Section Name"> ... fields ... </div>
  • Wraps fields into a named group
  • Multiple wp-fields-group groups per page supported
  • On theme-options: all groups merge into one container
  • Without wp-fields-group: fields generate PHP only

wp-show-editor

WordPress-Texteditor auf Seiten mit benutzerdefinierten Feldern sichtbar halten.

Verwendung

<body wp-show-editor wp-fields-group="Section">
  • Auf dem <body>-Tag platzieren — standardmäßig ist der Editor auf Seitenvorlagen mit Feldern ausgeblendet
  • Zusammen mit wp-fields-group verwenden, wenn die Seite sowohl benutzerdefinierte Felder als auch the_content() benötigt
  • Gilt nicht für Einzelbeitragsvorlagen (single, single-product) — der Editor bleibt dort immer sichtbar

Menu System

WordPress menus found by name.

wp-menu

<nav wp-menu="Menu Name"> ... </nav>

Simple menu rendering with Webflow-compatible markup.

wp-menu-tree

<nav wp-menu-tree="Menu Name"> ... template ... </nav>

Recursive menu with custom template.

wp-menu-tpl

<a wp-menu-tpl="link">...</a>
<div wp-menu-tpl="drop">...</div>

Explicit template markers inside wp-menu-tree.

ACF-/SCF-Datenkompatibilität

Secure Custom Fields ist ein kostenloser, direkt einsetzbarer Fork von ACF PRO, der auf WordPress.org gepflegt wird. Er ist API-identisch und speichert Werte exakt am selben Ort, sodass SCF, ACF PRO und vorhandene ACF-Daten vollständig austauschbar sind.

Dieselben Felder, dieselben Daten

Ein Engine-Wechsel migriert oder überschreibt deine Inhalte nie — beide Engines lesen dieselben Feldschlüssel aus wp_postmeta / wp_options. Vorhandene ACF-Daten aus einem anderen Theme oder einer manuellen Einrichtung werden anhand des Feldnamens übernommen, unabhängig davon, welche Engine sie erstellt hat.

Vorhandene & Drittanbieter-ACF-Daten

Wenn bereits ACF- (oder SCF-)Daten vorhanden sind — von einem anderen Generator, einem früheren Theme oder einer manuellen Feldgruppe — liest das Theme sie unverändert anhand des Feldnamens. Nichts zu importieren oder zu konvertieren; die Werte erscheinen im Editor unter der jeweils aktiven Engine.

JavaScript Hooks

Benutzerdefinierte Callback-Funktionen in custom.js. Das Theme prüft diese Funktionen und ruft sie zum richtigen Zeitpunkt auf.

Allgemeine Hooks

HookWann aufgerufen
tf_webflow_init()Nach AJAX-Inhaltsladen (Webflow-Interaktionen neu initialisieren)
tf_after_filter()Nach dem Laden der AJAX-Filterergebnisse

WooCommerce-Hooks

HookWann aufgerufen
tf_cart_data_modify(data)Vor dem Hinzufügen zum Warenkorb (Warenkorbdaten ändern)
tf_after_add_to_cart()Nach dem Hinzufügen des Produkts zum Warenkorb
tf_after_cart_data_modify()Nach Änderung der Warenkorbdaten
tf_after_variation_change()Nach Änderung der Produktvariante
tf_after_recalc_checkout()Nach Neuberechnung der Kassensummen

Definiere diese Funktionen in custom.js. Ältere Namen mit wfp_-Präfix werden aus Kompatibilitätsgründen ebenfalls unterstützt.

Benutzerdefinierte Abfragen

Erstelle WP_Query- und Term-Abfragen über die Theme-Panel-Oberfläche — kein Code erforderlich.

Beitragsabfrage

Einrichtung in Theme-Panel → Custom Queries. Jede Abfrage enthält: Name, Beitragstyp, Beiträge pro Seite, Paginierung, Taxonomie-Filter.

$args = select_query_by_name('my_query');
$query = new WP_Query($args);

Term-Abfrage

Einrichtung in Theme-Panel → Custom Term Queries. Jede Abfrage enthält: Name, Taxonomie, hide_empty, orderby, order.

$args = select_term_query_by_name('my_terms');
$terms = get_terms($args);

Hilfsfunktionen

PHP-Funktionen verfügbar in Templates und user-functions.php.

Allgemein

FunktionGibt zurück
tf_default_thumbnail()Standard-Platzhalter-Bild-URL (konfigurierbar in Theme-Einstellungen)
tf_declense($n, $f1, $f2, $f5)Slawische Pluralform: korrekte Wortform für eine Zahl wählen
tf_num_decline($n, $titles)Plural mit Zahlenpräfix. Akzeptiert Array oder kommagetrennte Zeichenkette.
search_context($chars)Textauszug um den Suchtreffer ausgeben
device_is($type)Gerät erkennen: phone, tablet, mobile, desktop, ios, android

WooCommerce

FunktionGibt zurück
is_sale()Ob das aktuelle Produkt im Angebot ist
get_price($type, $format)Produktpreis: "price", "price_sale", "price_regular". Format: "default", "extreme", "range"
get_cart_info($info)Warenkorbsummen: total_without_discount, total_with_discount, discount_amount, discount_percentage, coupon_discounts
get_cart_volume()Gesamtvolumen des Warenkorbs in Kubikmetern