Saltar al contenido
themeforge
ES
Empieza gratis
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

Consultas

Crea selecciones reutilizables de WP_Query / get_terms(). Úsalas de dos formas: llama a un preset de consulta desde una plantilla PHP, o adjunta una Custom Query a un elemento de bucle directamente mediante atributos HTML.

Desde una plantilla PHP (Query Presets)

Crea un preset en la subpestaña Post/Term Query Presets, asígnale un Query Code y llámalo desde el código de la plantilla:

  • Posts: $q = new WP_Query(tf_get_query('your-code'));
  • Terms: $terms = tf_get_term_query('your-code');
  • Auto-apply: asocia un preset a un archivo de tipo de entrada o taxonomía en la pestaña «Auto-apply» y reemplazará la consulta principal automáticamente (mediante pre_get_posts), sin editar la plantilla.

Mediante atributos HTML (Custom Queries)

Nombra una consulta en la subpestaña Custom Queries / Term Queries y luego referénciala en el elemento de bucle, o escribe los argumentos en línea. Solo el primer elemento hijo se usa como plantilla repetida.

  • Por nombre: <div wp-select="catalog"> … </div> (alias: wp-query-name)
  • En línea: <div wp-query="'post_type'=>'product','posts_per_page'=>8">
  • Lista de términos: <div wp-term-query="'taxonomy'=>'product_cat','parent'=>0"> · wp-term-select="name"
  • WooCommerce: <div wp-product-query="get_related_products(4)">

Dentro del bucle: campos

En los elementos dentro del bucle, muestra los valores con atributos de WordPress o atributos de campo 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 (formato alternativo: f_text, f_image, f_loop)

Compatibilidad

El runtime lee tres fuentes por orden de prioridad: presets de TF, luego Query Master (sitios importados antiguos) y luego las consultas del configurador heredado. Los presets nuevos siempre se guardan en el almacenamiento de TF; los datos existentes siguen funcionando.

Tipos de contenido y taxonomías personalizados

Registra tipos de contenido y taxonomías personalizados desde el panel: cada fila del repetidor corresponde a una llamada de registro de WordPress, sin código.

Tipos de contenido personalizados

Cada fila corresponde a register_post_type(). El campo «Name» es la clave del tipo de contenido (minúsculas latinas, sin espacios). Define las etiquetas plural/singular/menú, un icono de Dashicons, las funciones admitidas (título, editor, miniatura, …), el slug de URL del archivo, REST/Gutenberg, la disponibilidad pública, un interruptor «Archivo público» (desactiva el feed /slug/ para tipos de servicio) — y una «Página de aterrizaje del archivo» opcional que hace el archivo editable (ver la sección «Páginas de aterrizaje de archivos» más abajo).

Taxonomías personalizadas

Cada fila corresponde a register_taxonomy(). Elige jerárquica (como categorías) o plana (como etiquetas), vincúlala a uno o varios tipos de contenido y define el slug y la visibilidad en REST.

Cómo se conectan

Los nuevos tipos de contenido y taxonomías aparecen automáticamente en los desplegables de los presets de consultas. Los enlaces permanentes se actualizan al guardar. Las plantillas siguen las convenciones de WordPress: single-{type}.php, archive-{type}.php, taxonomy-{taxonomy}.php.

Páginas de aterrizaje de archivos

La URL de un archivo (el blog, el catálogo de la tienda, el archivo de un tipo de contenido personalizado) muestra una LISTA de entradas: no tiene página propia, así que normalmente no hay nada que editar en ella. ThemeForge da a cada archivo una página de aterrizaje: una página real de la lista de Páginas cuyos campos se convierten en el contenido editable del archivo (título hero, texto introductorio, imágenes, SEO), mientras el feed sigue mostrando la lista. Los editores modifican el archivo igual que cualquier otra página.

Cómo funciona

En la página de archivo de tu proyecto Webflow (archive-post, archive-product, archive-{type}) coloca los atributos de campo FUERA del bucle del listado, es decir, fuera del elemento marcado con wp="posts" / wp="products". Esos campos se adjuntan automáticamente a la página de aterrizaje en la administración y se muestran desde ella en la URL del archivo.

  • Fuera del bucle funciona cualquier campo de valor único: fld-text, fld-image, fld-link, fld-bg-image, fld-editor y el resto de la familia fld-*, además de wp="post-title" y wp="post-content", que imprimen el título y el contenido de la propia página de aterrizaje.
  • Los campos DENTRO del bucle conservan su significado habitual: leen cada entrada listada, exactamente como antes.
  • Los sitios multilingües resuelven la página de aterrizaje por idioma automáticamente (Polylang / WPML): cada idioma edita su propia traducción de la página.
  • SEO: en los archivos de tipos de contenido personalizados la página de aterrizaje también alimenta a Yoast — el archivo recibe su título SEO y una URL canónica correcta, incluso en las páginas paginadas.

Blog

El aterrizaje del blog es la «Página de entradas» nativa de WordPress. Crea una página (por ejemplo /blog/), asígnala en Ajustes → Lectura, y los campos colocados fuera del bucle en la plantilla archive-post se adjuntan a esa página, sin configuración adicional.

Se configura en: Settings → Reading → Página de entradas
Plantilla: archive-post

Catálogo de WooCommerce

El catálogo de la tienda usa la página Tienda de WooCommerce como aterrizaje. Los campos fuera del bucle de productos en la plantilla archive-product se adjuntan a la página Tienda y se muestran en la URL del catálogo.

Se configura en: WooCommerce → Settings → Products → Shop page
Plantilla: archive-product

Tipos de contenido personalizados

El archivo de un tipo de contenido personalizado no tiene aterrizaje nativo en WordPress, así que ThemeForge lo añade: crea una página cuya URL coincida con el slug del archivo (por ejemplo /portfolio/ para un tipo con slug de archivo «portfolio») y selecciónala en la fila de ese tipo en el Theme Panel. La URL del archivo sigue mostrando la plantilla del feed, y la página seleccionada lleva sus campos editables. Si la plantilla de archivo de tu proyecto Webflow declara un grupo de campos, ThemeForge crea (o adopta) la página de aterrizaje automáticamente — en todos los idiomas del sitio, igual que WooCommerce crea su página Tienda.

Se configura en: Appearance → Theme Panel → Custom Post Types → fila de tu tipo de contenido → «Archive landing page»
Plantilla: archive-{type}

La página vinculada ES DUEÑA de la URL del archivo: renombra la página y el archivo se mueve con ella (el campo de slug se oculta mientras hay una página vinculada). Sin página vinculada, el slug viene del Theme Panel. La página nunca se muestra directamente — es la superficie de edición detrás del archivo.

Conviene saber

  • Los campos de grupo fuera del bucle (repetidor, grupo, contenido flexible, galería) se leen desde la página de aterrizaje igual que los campos de valor único. La única excepción es un grupo con loop-mode="0": la pestaña de Registros del proyecto lo marca como «archive-scope-unsupported».
  • Un campo colocado DENTRO de un bucle de listado pertenece a las entradas listadas — decláralo en la plantilla single-{type} correspondiente para que aparezca en las pantallas de edición de esas entradas.
  • Si no hay página de aterrizaje configurada, nada se rompe: el archivo se muestra exactamente como antes. Puedes añadirla en cualquier momento sin regenerar el tema.

Forms Extension

Built-in form handling.

Features

  • SMTP email sending
  • reCAPTCHA v3 / v2
  • Telegram notifications
  • Protección contra spam sin claves — activada en sitios nuevos
  • Auto-reply
  • JustValidate client-side validation
  • CPT tf_form_entry — submission storage
  • CSV export

Protección contra spam

Funciona sin claves ni servicios externos. En un sitio nuevo está activada desde el principio; en un sitio que ya recibe solicitudes, actívela con «Protección básica contra spam» en Formularios → Ajustes.

  • Filtra los envíos que rellenan un campo trampa oculto, llegan sin el script de la página, se envían más rápido de lo que una persona puede escribir, llevan varios enlaces o se saltan el captcha de imagen. La frecuencia de envío desde una misma dirección está limitada.
  • Los envíos filtrados no se mandan a ningún sitio: quedan 30 días en la carpeta Spam de Entradas, y uno filtrado por error puede recuperarse con «No es spam».
  • Los formularios propios de WordPress los protege un interruptor aparte, «Protección contra spam para formularios de WordPress», activado por defecto: comentarios y valoraciones de productos, registro y restablecimiento de contraseña. Un comentario que un bot envía sin abrir la página se rechaza y no se guarda; uno dudoso va a Comentarios → Spam; un registro o una solicitud de restablecimiento sospechosos se rechazan pidiendo volver a intentarlo. El formulario de acceso y los usuarios conectados no se comprueban.
  • El captcha de imagen habla el idioma de la página: los textos se definen por idioma y solo dibuja caracteres que el visitante puede escribir sin cambiar la distribución del teclado (letras ucranianas, rusas, latinas o cifras).

Contra bots diseñados para imitar a una persona, use reCAPTCHA con claves de Google: se activa en los mismos ajustes.

wp-field — una clave de campo que sobrevive al cambio de nombre

Por defecto, un campo de formulario se envía con la etiqueta que escribiste en Webflow. Si la renombras más tarde, la plantilla del correo y el mapa de entrega que la referenciaban dejan de coincidir, y en silencio: la solicitud sigue llegando. Marca el campo (o su contenedor con la etiqueta) y la clave dejará de depender del texto visible.

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

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

La clave se escribe en el campo al generar el tema, así que después no hay nada que configurar. Usa letras latinas, dígitos, _ y -; los nombres reservados por el sistema de formularios se rechazan y quedan en el registro del proyecto. Los campos cuyo nombre fija WordPress o WooCommerce — comentarios, reseñas, pago — se marcan con sus propias etiquetas.

Motor de campos personalizados

El tema almacena los campos personalizados mediante un motor compatible con ACF. Dos motores intercambiables comparten los mismos campos y datos, por lo que puedes cambiar sin perder valores.

Dos motores, un formato de datos

¿Secure Custom Fields es el predeterminado: un plugin gratuito de WordPress.org que se actualiza solo y ofrece todos los tipos de campo de ACF PRO, sin licencia. ¿Prefieres tu propio ACF PRO con licencia? Instálalo y el tema lo detecta automáticamente.

Default: Secure Custom Fields (SCF) — gratis, desde WordPress.org, actualizaciones automáticas
Alternative: Advanced Custom Fields PRO — tu propia licencia, detectada automáticamente
Switch: Appearance → Theme Panel → Site Settings → Field backend

Opciones multilingüe

Soporte multilingüe integrado para opciones del tema y campos de página. Se activa automáticamente con Polylang o WPML.

Cómo funciona

El tema detecta automáticamente Polylang o WPML y carga la integración correspondiente.

  • Detección automática: Polylang (pll_current_language) o WPML (ICL_SITEPRESS_VERSION)
  • Almacenamiento por idioma: cada idioma tiene su propio conjunto de valores de opciones
  • Fallback: los campos vacíos heredan valores de «Todos (predeterminado)»
  • Banderas personalizadas: subir banderas propias desde la Biblioteca de medios

Gestión de opciones por idioma

Use el selector de idioma en la página de opciones para editar los valores de cada idioma.

ActionDescription
«Todos (predeterminado)»Valores maestros. Se usan como fallback cuando un idioma no tiene valor propio.
Edición por idiomaCambie al idioma para editar sus valores. Los campos vacíos heredan de «Todos».
HerenciaDeje un campo vacío en la página del idioma para usar el valor «Todos (predeterminado)» en el frontend.

Traducción automática de campos

Traducción automática integrada de valores de campos. Disponible en la barra lateral en páginas de edición y opciones.

  • Botón «Traducir» junto a cada campo de texto
  • «Traducir todo» en la barra lateral — traduce todos los campos a la vez, incluidas pestañas y repetidores ocultos
  • Los campos de enlace se omiten automáticamente (detección por nombre y patrón URL)
  • No requiere clave API — usa el endpoint gratuito de Google Translate
  • Campos WYSIWYG (texto enriquecido) soportados — se preserva la estructura HTML

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

Orden de carga 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

Fuente del título de página

Al crear páginas de WordPress durante la importación, el título se toma del HTML de origen en orden de prioridad:

  1. <meta property="og:title"> — Open Graph
  2. <title> — HTML title tag
  3. Nombre de la plantilla (ej. "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

Importación por idioma

Añada &lang=xx para importar datos en un idioma específico. El metabox de importación detecta automáticamente el idioma de la página.

/?action=import_page_data&slug=theme-options&lang=en
ContextoDescription
Opciones del temaGuarda las opciones con un sufijo de idioma (options_LOCALE_field). Usa el selector de idioma en la página de Opciones.
PáginasBusca o crea la traducción de Polylang e importa los datos en ella. La página original se encuentra independientemente del filtro de idioma.
Metabox de importaciónEn páginas: detecta el idioma del post (pll_get_post_language). En opciones: lee ?lang= de la URL.

Referencia para desarrolladores

Detalles técnicos para desarrolladores y asistentes de IA. Atributos HTML, tipos de campos, sistema de menús, hooks JavaScript, funciones auxiliares.

Field Types

Mapeo de tipos de campo ACF / SCF. Cada tipo de atributo corresponde a un elemento HTML específico.

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

Mantener visible el editor de texto de WordPress en páginas con campos personalizados.

Uso

<body wp-show-editor wp-fields-group="Section">
  • Colocar en la etiqueta <body> — por defecto, el editor se oculta en plantillas de página con campos
  • Usar junto con wp-fields-group cuando la página necesita campos personalizados Y the_content()
  • No se aplica a plantillas de entrada (single, single-product) — el editor siempre permanece 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.

Compatibilidad de datos ACF / SCF

Secure Custom Fields es un fork gratuito y compatible de ACF PRO, mantenido en WordPress.org. Es idéntico a nivel de API y almacena los valores exactamente en el mismo lugar, por lo que SCF, ACF PRO y cualquier dato ACF existente son totalmente intercambiables.

Los mismos campos, los mismos datos

Cambiar de motor nunca migra ni reescribe tu contenido: ambos motores leen las mismas claves de campo de wp_postmeta / wp_options. Los datos ACF existentes de otro tema o de una configuración manual se reconocen por el nombre del campo, sin importar qué motor los creó.

Datos ACF existentes y de terceros

Si ya existen datos ACF (o SCF) — de otro generador, un tema anterior o un grupo de campos manual — el tema los lee tal cual por nombre de campo. Nada que importar ni convertir; los valores aparecen en el editor bajo el motor que esté activo.

Hooks de JavaScript

Funciones callback personalizadas disponibles en custom.js. El tema verifica estas funciones y las llama en el momento adecuado.

Hooks generales

HookCuándo se llama
tf_webflow_init()Después de la carga AJAX del contenido (reinicializar interacciones Webflow)
tf_after_filter()Después de cargar los resultados del filtro AJAX

Hooks de WooCommerce

HookCuándo se llama
tf_cart_data_modify(data)Antes de añadir al carrito (modificar datos del carrito)
tf_after_add_to_cart()Después de añadir el producto al carrito
tf_after_cart_data_modify()Después de modificar los datos del carrito
tf_after_variation_change()Después de cambiar la variante del producto
tf_after_recalc_checkout()Después de recalcular los totales del pedido

Defina estas funciones en custom.js. Los nombres antiguos con prefijo wfp_ también son compatibles.

Consultas personalizadas

Cree consultas WP_Query y de términos a través de la interfaz del Panel del tema — sin código.

Consulta de entradas

Configuración en Panel del tema → Custom Queries. Cada consulta contiene: nombre, tipo de entrada, entradas por página, paginación, filtros de taxonomía.

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

Consulta de términos

Configuración en Panel del tema → Custom Term Queries. Cada consulta contiene: nombre, taxonomía, hide_empty, orderby, order.

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

Funciones auxiliares

Funciones PHP disponibles en plantillas y user-functions.php.

General

FunciónDevuelve
tf_default_thumbnail()URL de imagen predeterminada (configurable en Ajustes del tema)
tf_declense($n, $f1, $f2, $f5)Forma plural eslava: elegir la forma correcta de la palabra para un número
tf_num_decline($n, $titles)Plural con prefijo numérico. Acepta array o cadena separada por comas.
search_context($chars)Mostrar extracto de texto alrededor de la coincidencia de búsqueda
device_is($type)Detectar dispositivo: phone, tablet, mobile, desktop, ios, android

WooCommerce

FunciónDevuelve
is_sale()Si el producto actual está en oferta
get_price($type, $format)Precio del producto: "price", "price_sale", "price_regular". Formato: "default", "extreme", "range"
get_cart_info($info)Totales del carrito: total_without_discount, total_with_discount, discount_amount, discount_percentage, coupon_discounts
get_cart_volume()Volumen total del carrito en metros cúbicos