Aller au contenu
themeforge
FR
Commencer gratuitement
Menu

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

Requêtes

Créez des sélections WP_Query / get_terms() réutilisables. Utilisez-les de deux façons : appelez un préréglage de requête depuis un template PHP, ou attachez une Custom Query à un élément de boucle directement via des attributs HTML.

Depuis un template PHP (Query Presets)

Créez un préréglage dans le sous-onglet Post/Term Query Presets, donnez-lui un Query Code, puis appelez-le depuis le code du template :

  • Posts: $q = new WP_Query(tf_get_query('your-code'));
  • Terms: $terms = tf_get_term_query('your-code');
  • Auto-apply : associez un préréglage à une archive de type de publication ou de taxonomie dans l'onglet « Auto-apply » et il remplace automatiquement la requête principale (via pre_get_posts), sans modifier le template.

Via les attributs HTML (Custom Queries)

Nommez une requête dans le sous-onglet Custom Queries / Term Queries, puis référencez-la sur l'élément de boucle — ou écrivez les arguments en ligne. Seul le premier élément enfant sert de modèle répété.

  • Nommée: <div wp-select="catalog"> … </div> (alias : wp-query-name)
  • En ligne: <div wp-query="'post_type'=>'product','posts_per_page'=>8">
  • Liste de termes: <div wp-term-query="'taxonomy'=>'product_cat','parent'=>0"> · wp-term-select="name"
  • WooCommerce: <div wp-product-query="get_related_products(4)">

Dans la boucle — champs

Sur les éléments à l'intérieur de la boucle, affichez les valeurs avec des attributs WordPress ou des attributs de champ ACF/SCF :

  • 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 (format alternatif : f_text, f_image, f_loop)

Compatibilité

Le runtime lit trois sources par ordre de priorité : les préréglages TF, puis Query Master (anciens sites importés), puis les requêtes du configurateur hérité. Les nouveaux préréglages sont toujours enregistrés dans le stockage TF ; les données existantes continuent de fonctionner.

Types de publication & taxonomies personnalisés

Enregistrez des types de publication et des taxonomies personnalisés depuis le panneau — chaque ligne du répéteur correspond à un appel d'enregistrement WordPress, sans code.

Types de publication personnalisés

Chaque ligne correspond à register_post_type(). Le champ « Name » est la clé du type de publication (minuscules latines, sans espaces). Définissez les libellés pluriel/singulier/menu, une icône Dashicons, les fonctionnalités prises en charge (titre, éditeur, image mise en avant, …), le slug d'URL de l'archive, REST/Gutenberg, la disponibilité publique, un interrupteur « Archive publique » (désactive le flux /slug/ pour les types de service) — et une « Page d'atterrissage d'archive » facultative qui rend l'archive modifiable (voir la section « Pages d'atterrissage d'archives » ci-dessous).

Taxonomies personnalisées

Chaque ligne correspond à register_taxonomy(). Choisissez hiérarchique (comme les catégories) ou plate (comme les étiquettes), liez-la à un ou plusieurs types de publication, et définissez le slug et la visibilité REST.

Comment ils s'articulent

Les nouveaux types de publication et taxonomies apparaissent automatiquement dans les listes déroulantes des préréglages de requêtes. Les permaliens sont actualisés à l'enregistrement. Les templates suivent les conventions WordPress : single-{type}.php, archive-{type}.php, taxonomy-{taxonomy}.php.

Pages d'atterrissage d'archives

L'URL d'une archive (le blog, le catalogue de la boutique, l'archive d'un type de publication personnalisé) affiche une LISTE de publications — elle n'a pas de page propre, il n'y a donc normalement rien à y modifier. ThemeForge donne à chaque archive une page d'atterrissage : une vraie page de la liste des Pages, dont les champs deviennent le contenu modifiable de l'archive (titre hero, texte d'introduction, images, SEO), tandis que le flux continue d'afficher la liste. Les rédacteurs modifient l'archive comme n'importe quelle autre page.

Comment ça marche

Sur la page d'archive de votre projet Webflow (archive-post, archive-product, archive-{type}), placez les attributs de champ EN DEHORS de la boucle de liste — c'est-à-dire hors de l'élément marqué wp="posts" / wp="products". Ces champs s'attachent automatiquement à la page d'atterrissage dans l'administration et s'affichent depuis elle sur l'URL de l'archive.

  • Hors boucle, tout champ à valeur unique fonctionne : fld-text, fld-image, fld-link, fld-bg-image, fld-editor et le reste de la famille fld-*, plus wp="post-title" et wp="post-content", qui affichent le titre et le contenu de la page d'atterrissage elle-même.
  • Les champs À L'INTÉRIEUR de la boucle gardent leur sens habituel : ils lisent chaque publication listée, exactement comme avant.
  • Les sites multilingues résolvent la page d'atterrissage par langue automatiquement (Polylang / WPML) : chaque langue modifie sa propre traduction de la page.
  • SEO : pour les archives de types personnalisés, la page d'atterrissage alimente aussi Yoast — l'archive reçoit son titre SEO et une URL canonique correcte, y compris sur les pages paginées.

Blog

L'atterrissage du blog est la « Page des articles » native de WordPress. Créez une page (par exemple /blog/), assignez-la dans Réglages → Lecture, et les champs placés hors boucle sur le template archive-post s'attachent à cette page — aucune configuration supplémentaire.

Se configure dans: Settings → Reading → Page des articles
Template: archive-post

Catalogue WooCommerce

Le catalogue de la boutique utilise la page Boutique de WooCommerce comme atterrissage. Les champs hors de la boucle produits sur le template archive-product s'attachent à la page Boutique et s'affichent sur l'URL du catalogue.

Se configure dans: WooCommerce → Settings → Products → Shop page
Template: archive-product

Types de publication personnalisés

L'archive d'un type personnalisé n'a pas d'atterrissage natif dans WordPress, ThemeForge en ajoute donc un : créez une page dont l'URL correspond au slug de l'archive (par exemple /portfolio/ pour un type au slug d'archive « portfolio »), puis sélectionnez-la dans la ligne de ce type dans le Theme Panel. L'URL de l'archive continue d'afficher le template du flux, et la page sélectionnée porte ses champs modifiables. Si le template d'archive de votre projet Webflow déclare un groupe de champs, ThemeForge crée (ou adopte) la page d'atterrissage automatiquement — dans chaque langue du site, comme WooCommerce crée sa page Boutique.

Se configure dans: Appearance → Theme Panel → Custom Post Types → ligne de votre type de publication → « Archive landing page »
Template: archive-{type}

La page liée POSSÈDE l'URL de l'archive : renommez la page et l'archive se déplace avec elle (le champ de slug est masqué tant qu'une page est liée). Sans page liée, le slug vient du Theme Panel. La page elle-même n'est jamais affichée directement — c'est la surface d'édition derrière l'archive.

Bon à savoir

  • Les champs de groupe hors boucle (répéteur, groupe, contenu flexible, galerie) sont lus depuis la page d'atterrissage comme les champs à valeur unique. La seule exception est un groupe avec loop-mode="0" : l'onglet Journaux du projet le signale comme « archive-scope-unsupported ».
  • Un champ placé À L'INTÉRIEUR d'une boucle de liste appartient aux publications listées — déclarez-le sur le template single-{type} correspondant pour qu'il apparaisse sur leurs écrans d'édition.
  • Si aucune page d'atterrissage n'est configurée, rien ne casse : l'archive s'affiche exactement comme avant. Vous pouvez l'ajouter à tout moment sans régénérer le thème.

Forms Extension

Built-in form handling.

Features

  • SMTP email sending
  • reCAPTCHA v3 / v2
  • Telegram notifications
  • Protection anti-spam sans clé — activée sur les nouveaux sites
  • Auto-reply
  • JustValidate client-side validation
  • CPT tf_form_entry — submission storage
  • CSV export

Protection anti-spam

Fonctionne sans clé ni service externe. Sur un nouveau site, elle est active dès le départ ; sur un site qui reçoit déjà des demandes, activez-la avec « Protection de base contre le spam » dans Formulaires → Réglages.

  • Écarte les envois qui remplissent un champ piège caché, arrivent sans le script de la page, sont envoyés plus vite qu’une personne ne peut taper, contiennent plusieurs liens ou contournent le captcha image. La fréquence d’envoi depuis une même adresse est limitée.
  • Les envois écartés ne sont transmis nulle part : ils restent 30 jours dans le dossier Spam des Entrées, et un envoi écarté par erreur peut être récupéré avec « Pas un spam ».
  • Les formulaires propres à WordPress sont protégés par un interrupteur distinct, « Protection anti-spam des formulaires WordPress », activé par défaut : commentaires et avis produits, inscription et réinitialisation du mot de passe. Un commentaire qu’un robot envoie sans ouvrir la page est refusé et n’est enregistré nulle part ; un cas limite va dans Commentaires → Indésirables ; une inscription ou une demande de réinitialisation suspecte est refusée avec une invitation à réessayer. Le formulaire de connexion et les utilisateurs connectés ne sont pas vérifiés.
  • Le captcha image parle la langue de la page : les textes se règlent par langue, et il ne dessine que des caractères qu’un visiteur peut taper sans changer de disposition de clavier (lettres ukrainiennes, russes, latines ou chiffres).

Contre les robots conçus pour imiter une personne, utilisez reCAPTCHA avec des clés Google : elle s’active dans les mêmes réglages.

wp-field — une clé de champ qui survit à un renommage

Par défaut, un champ de formulaire est envoyé sous le libellé saisi dans Webflow. Renommez ce libellé plus tard et le modèle d'e-mail ainsi que la table de correspondance qui s'y référaient ne correspondent plus — en silence, car la demande arrive toujours. Marquez le champ (ou son conteneur avec le libellé) : la clé ne dépend alors plus du texte affiché.

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

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

La clé est inscrite dans le champ lors de la génération du thème ; rien à configurer ensuite. Utilisez lettres latines, chiffres, _ et - ; les noms réservés par le système de formulaires sont refusés et consignés dans le journal du projet. Les champs dont le nom est imposé par WordPress ou WooCommerce — commentaires, avis, commande — utilisent leurs propres marqueurs.

Moteur de champs personnalisés

Le thème stocke les champs personnalisés via un moteur compatible ACF. Deux moteurs interchangeables partagent les mêmes champs et données : vous pouvez basculer sans perdre de valeurs.

Deux moteurs, un seul format de données

Secure Custom Fields est utilisé par défaut — une extension WordPress.org gratuite qui se met à jour automatiquement et fournit tous les types de champs d'ACF PRO, sans licence. Vous préférez votre propre ACF PRO sous licence ? Installez-le, le thème le détecte automatiquement.

Default: Secure Custom Fields (SCF) — gratuit, depuis WordPress.org, mises à jour automatiques
Alternative: Advanced Custom Fields PRO — votre propre licence, détectée automatiquement
Switch: Appearance → Theme Panel → Site Settings → Field backend

Options multilingues

Support multilingue intégré pour les options du thème et les champs de page. S'active automatiquement avec Polylang ou WPML.

Fonctionnement

Le thème détecte automatiquement Polylang ou WPML et charge l'intégration appropriée.

  • Détection automatique : Polylang (pll_current_language) ou WPML (ICL_SITEPRESS_VERSION)
  • Stockage par langue : chaque langue dispose de son propre jeu de valeurs d'options
  • Fallback : les champs vides héritent des valeurs de « Tous (par défaut) »
  • Drapeaux personnalisés : télécharger des drapeaux depuis la Médiathèque

Gestion des options par langue

Utilisez le sélecteur de langue sur la page d'options pour modifier les valeurs de chaque langue.

ActionDescription
« Tous (par défaut) »Valeurs maîtres. Utilisées comme fallback quand une langue n'a pas de valeur spécifique.
Édition par langueBasculez vers une langue pour modifier ses valeurs. Les champs vides héritent de « Tous ».
HéritageLaissez un champ vide sur la page d'une langue pour utiliser la valeur « Tous (par défaut) » côté public.

Traduction automatique des champs

Traduction automatique intégrée des valeurs de champs. Disponible dans la barre latérale sur les pages d'édition et d'options.

  • Bouton « Traduire » à côté de chaque champ texte
  • « Tout traduire » dans la barre latérale — traduit tous les champs d'un coup, y compris les onglets et répéteurs cachés
  • Les champs de liens sont ignorés automatiquement (détection par nom et motif URL)
  • Pas de clé API requise — utilise le point d'accès gratuit Google Translate
  • Champs WYSIWYG (texte riche) supportés — structure HTML préservée

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

Ordre de chargement CSS : 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

Source du titre de page

Lors de la création de pages WordPress pendant l'import, le titre est extrait du HTML source par ordre de priorité :

  1. <meta property="og:title"> — Open Graph
  2. <title> — HTML title tag
  3. Nom du template (ex. « About » de 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

Import par langue

Ajoutez &lang=xx pour importer les données dans une langue spécifique. La métabox d'import détecte automatiquement la langue de la page.

/?action=import_page_data&slug=theme-options&lang=en
ContexteDescription
Options du thèmeEnregistre les options avec un suffixe de langue (options_LOCALE_field). Utilisez le sélecteur de langue sur la page Options.
PagesTrouve ou crée la traduction Polylang, importe les données dedans. La page originale est trouvée indépendamment du filtre de langue.
Métabox d'importSur les pages : détecte la langue du post (pll_get_post_language). Sur les options : lit ?lang= depuis l'URL.

Référence développeur

Détails techniques pour développeurs et assistants IA. Attributs HTML, types de champs, système de menus, hooks JavaScript, fonctions utilitaires.

Field Types

Correspondance des types de champ ACF / SCF. Chaque type d'attribut correspond à un élément HTML spécifique.

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

Garder l'éditeur de texte WordPress visible sur les pages avec des champs personnalisés.

Utilisation

<body wp-show-editor wp-fields-group="Section">
  • Placer sur la balise <body> — par défaut, l'éditeur est masqué sur les modèles de pages avec des champs
  • Utiliser avec wp-fields-group quand la page a besoin de champs personnalisés ET de the_content()
  • Ne s'applique pas aux modèles d'articles (single, single-product) — l'éditeur y reste toujours visible

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.

Compatibilité des données ACF / SCF

Secure Custom Fields est un fork gratuit et compatible d'ACF PRO, maintenu sur WordPress.org. Il est identique au niveau de l'API et stocke les valeurs exactement au même endroit : SCF, ACF PRO et toute donnée ACF existante sont entièrement interchangeables.

Mêmes champs, mêmes données

Changer de moteur ne migre ni ne réécrit jamais votre contenu — les deux moteurs lisent les mêmes clés de champ dans wp_postmeta / wp_options. Les données ACF existantes d'un autre thème ou d'une configuration manuelle sont reprises par nom de champ, quel que soit le moteur qui les a créées.

Données ACF existantes et tierces

Si des données ACF (ou SCF) existent déjà — d'un autre générateur, d'un thème précédent ou d'un groupe de champs manuel — le thème les lit telles quelles par nom de champ. Rien à importer ni à convertir ; les valeurs apparaissent dans l'éditeur sous le moteur actif.

Hooks JavaScript

Fonctions callback personnalisées disponibles dans custom.js. Le thème vérifie ces fonctions et les appelle au moment approprié.

Hooks généraux

HookQuand appelé
tf_webflow_init()Après le chargement AJAX du contenu (réinitialisation des interactions Webflow)
tf_after_filter()Après le chargement des résultats du filtre AJAX

Hooks WooCommerce

HookQuand appelé
tf_cart_data_modify(data)Avant l'ajout au panier (modifier les données du panier)
tf_after_add_to_cart()Après l'ajout du produit au panier
tf_after_cart_data_modify()Après la modification des données du panier
tf_after_variation_change()Après le changement de variante du produit
tf_after_recalc_checkout()Après le recalcul des totaux de la commande

Définissez ces fonctions dans custom.js. Les anciens noms avec le préfixe wfp_ sont également supportés pour la compatibilité.

Requêtes personnalisées

Créez des requêtes WP_Query et de termes via l'interface du Panneau du thème — sans code.

Requête d'articles

Configuration dans Panneau du thème → Custom Queries. Chaque requête contient : nom, type d'article, articles par page, pagination, filtres de taxonomie.

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

Requête de termes

Configuration dans Panneau du thème → Custom Term Queries. Chaque requête contient : nom, taxonomie, hide_empty, orderby, order.

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

Fonctions utilitaires

Fonctions PHP disponibles dans les templates et user-functions.php.

Général

FonctionRetourne
tf_default_thumbnail()URL de l'image par défaut (configurable dans les Paramètres du thème)
tf_declense($n, $f1, $f2, $f5)Forme plurielle slave : choisir la forme correcte du mot pour un nombre
tf_num_decline($n, $titles)Pluriel avec préfixe numérique. Accepte un tableau ou une chaîne séparée par des virgules.
search_context($chars)Afficher un extrait de texte autour de la correspondance de recherche
device_is($type)Détecter l'appareil : phone, tablet, mobile, desktop, ios, android

WooCommerce

FonctionRetourne
is_sale()Si le produit actuel est en promotion
get_price($type, $format)Prix du produit : "price", "price_sale", "price_regular". Format : "default", "extreme", "range"
get_cart_info($info)Totaux du panier : total_without_discount, total_with_discount, discount_amount, discount_percentage, coupon_discounts
get_cart_volume()Volume total du panier en mètres cubes