Campos ACF en una tabla de productos WooCommerce: columnas, enlaces y filtros
Para mostrar campos ACF en una tabla de productos WooCommerce, primero hay que saber dónde vive el valor. Los atributos de producto, las categorías y las marcas son taxonomías, y la tabla las ofrece como columnas por sí sola. Los campos ACF, y los campos que la mayoría de los demás plugins añaden a los productos, son metadatos de entrada (post meta): la tabla los muestra solo después de que le indiques la clave meta exacta. A continuación se explica cómo funcionan ambos casos, qué tipos de campo ACF se muestran correctamente sin código y cómo convertir URL, archivos e ID en enlaces o imágenes.
Añadir campos ACF a una tabla de productos WooCommerce en la pestaña Meta
ACF guarda cada valor en la tabla estándar wp_postmeta bajo el nombre del campo. La tabla puede leer cualquier valor de este tipo, pero no puede adivinar cuáles de los cientos de claves meta de una tienda te importan, así que los campos de ACF, Pods, plugins de precios y otras fuentes nunca aparecen automáticamente. Los registras por tabla:
- En la página de administración de WOOT, haz clic en el icono de engranaje (opciones de la tabla (table options)) de tu tabla y abre la pestaña Meta.
- Haz clic en Añadir campo meta (Add meta field). Aparece una fila con la clave de ejemplo
0 write key here. - Rellena Título (Title), escribe el nombre exacto del campo en Clave meta (Meta key) y elige el Tipo (Type):
text,numberocalendar. No lo dejes en no definido (not defined): el tipo decide cómo se ordena y se filtra el valor. - Ve a la pestaña Columnas (Columns), añade una columna y selecciona el nuevo campo (aparece con su Título). Ponlo en Activo (Active).
- Para filtrar por él, arrástralo al formulario de filtro en la pestaña Filtro (Filter).
| Tipo | Celda | Ordenación | Elemento de filtro |
|---|---|---|---|
text | El valor tal como está guardado | Alfabética | Campo de texto, coincide con cualquier parte del valor |
number | El valor tal como está guardado | Numérica | Deslizador de rango; el mínimo y el máximo se leen de la base de datos, números enteros |
calendar | Una fecha en el formato de fecha del sitio | Numérica: exacta para marcas de tiempo, solo por año para los valores de fecha y hora de ACF | Calendarios Desde y Hasta; define Tipo de datos (Data type) en datetime para ACF o en unixtimestamp para marcas de tiempo |
Tres detalles ahorran tiempo. Usa el nombre del campo (spec_sheet), no la clave del campo (field_5f2a…) ni su gemelo oculto que empieza por un guion bajo (_spec_sheet): ACF guarda ahí la clave del campo, así que una celda que muestre field_… indica que la clave es la equivocada. Ordenar por una clave meta oculta los productos que no tienen valor para ella, que es como funcionan las consultas de WordPress; esta pregunta frecuente muestra cómo conservarlos. Y los campos meta pertenecen a una tabla; para añadir una clave a todas las tablas a la vez, consulta añadir una clave meta de forma global.
Qué tipos de campo ACF funcionan sin código
Lo que muestra la celda depende de lo que ACF escribe en la base de datos, no del Formato de retorno (Return Format) que hayas elegido en ACF (ese ajuste solo afecta a get_field() en las plantillas).
| Tipo de campo ACF | Se guarda como | En la tabla |
|---|---|---|
| Texto, Área de texto, Número, Rango, Correo electrónico, Selector de color | Valor simple | Funciona con text o number |
| Selección (única), Botón de radio, Grupo de botones | El valor de la opción | Funciona; muestra el valor, no la etiqueta |
| Verdadero / Falso | 1 o 0 | Funciona, pero muestra el dígito |
| Selector de fecha y hora | 2026-12-31 18:00:00 | Funciona con calendar y el tipo de datos datetime |
| Selector de fecha | 20261231 | No es el formato para el que está pensado el filtro de calendario; prefiere el Selector de fecha y hora, o añádelo como text y dale formato con código |
| URL | La dirección como texto | Muestra la dirección, no un enlace; requiere código |
| Imagen, Archivo, Objeto de entrada, Enlace de página | Un ID de entrada o de adjunto | Muestra un número; requiere código |
| Casilla de verificación, Selección múltiple, Galería, Relación, Enlace | Un array serializado | No se puede leer tal cual; requiere código |
| Grupo | Una clave meta por subcampo | Añade un subcampo por su clave completa, groupname_subfieldname |
| Repetidor, Contenido flexible | Claves numeradas, name_0_sub | No es una sola clave; usa una columna personalizada |
Enlaces, manuales en PDF, imágenes: dar formato a la celda con woot_meta_data_cell
Un primer intento típico es escribir <a href="…">Spec PDF</a> en un atributo de producto. No puede funcionar: el valor de un atributo es el nombre de un término, WordPress elimina el HTML de los nombres de término, y la tabla ya envuelve cada término en un enlace a su archivo. En su lugar, guarda solo la URL en un campo meta (un campo URL o Archivo de ACF, o un campo personalizado normal sin espacios en su clave), añádelo en la pestaña Meta con el tipo text y construye el enlace en el filtro woot_meta_data_cell. Este recibe el valor sin procesar, la fila de la pestaña Meta, el ID del producto y el ID de la tabla, y lo que devuelva entra en la celda como HTML:
/*
* Products tables: display meta fields added in the Meta tab.
* Child theme functions.php or a code snippets plugin.
* Replace the keys in "case" with your own ACF field names.
*/
add_filter('woot_meta_data_cell', function ($value, $meta_data, $post_id, $table_id) {
switch ($meta_data['meta_key']) {
case 'spec_sheet': // ACF URL field: the value is a web address
$value = $value ? '<a href="' . esc_url($value) . '" target="_blank" rel="noopener">Spec sheet (PDF)</a>' : '';
break;
case 'manual': // ACF File field: the database holds the attachment ID
$url = $value ? wp_get_attachment_url((int) $value) : '';
$value = $url ? '<a href="' . esc_url($url) . '" target="_blank" rel="noopener">Manual</a>' : '';
break;
case 'energy_label': // ACF Image field: attachment ID
$value = $value ? wp_get_attachment_image((int) $value, 'thumbnail') : '';
break;
case 'colors': // ACF Checkbox or multiple Select: an array of values
$value = is_array($value) ? implode(', ', $value) : $value;
break;
case 'release_date': // ACF Date Picker: stored as Ymd
$date = $value ? DateTime::createFromFormat('!Ymd', $value) : false;
$value = $date ? date_i18n(get_option('date_format'), $date->getTimestamp()) : '';
break;
}
return $value;
}, 10, 4);
Las comprobaciones de valor vacío importan: sin ellas, todas las filas muestran un enlace, incluidos los productos que no tienen archivo. Para limitar una regla a una sola tabla, añade una condición como (int) $table_id === 21. Usa este filtro con campos text y number; un campo calendar convierte después el valor devuelto en una fecha, así que el HTML devuelto para él se perdería. Para rellenar muchos valores a la vez, lo más cómodo es cualquier editor masivo que pueda editar campos personalizados.
Valores que no son una sola clave meta: una columna personalizada
Cuando la celda necesita datos de varios lugares, o de algo que no es una sola clave meta (un repetidor, un atributo personalizado escrito en el producto, un cálculo), registra tu propia columna con woot_profile_extend. La función de retorno de action recibe el ID del producto de cada fila y puede usar cualquier función de WordPress, WooCommerce o ACF, incluida get_field():
/*
* Products tables: a "Material" column built from a product attribute.
* Works for global attributes and for custom attributes typed in the product.
* Child theme functions.php or a code snippets plugin.
*/
add_filter('woot_profile_extend', function ($profile, $action) {
if ('woot_woocommerce_tables' !== $action) {
return $profile;
}
$profile['material_text'] = [
'title' => 'Material',
'order' => false, // not sortable
'action' => function ($post_id) {
$product = wc_get_product($post_id);
return $product ? $product->get_attribute('material') : '';
},
];
return $profile;
}, 10, 2);
El nuevo campo aparece en la lista Campo (Field) de la pestaña Columnas con su título. Una columna así es solo de visualización: la ordenación y el filtrado requieren lógica de consulta, que la pestaña Meta añade por ti y que de otro modo tendrías que escribir tú.
Atributos, categorías y marcas: columnas ya preparadas
Cada taxonomía registrada para productos aparece en la lista Campo (Field) de la pestaña Columnas (Columns): categorías, etiquetas, cada atributo global (WooCommerce los muestra con el prefijo «Product», por ejemplo Product Color) y taxonomías personalizadas como las marcas. El tipo de producto, la visibilidad y la clase de envío quedan fuera. Añade una columna con Añadir columna al principio (Prepend column) o Añadir columna al final (Append column), elige la taxonomía en Campo (Field) y pon la columna en Activo (Active).
- Los términos se muestran como enlaces a sus páginas de archivo, de modo que las categorías como enlaces no requieren código. Para mostrar texto sin formato, abre las opciones de la columna y activa Mostrar como texto (Display as text).
- Las mismas taxonomías están disponibles en la pestaña Filtro (Filter) como desplegables o selecciones múltiples.
- Las columnas de taxonomía no se pueden ordenar haciendo clic en la cabecera. Un producto puede tener muchos términos, así que no hay un único valor por fila por el que ordenar.
- Los atributos personalizados escritos directamente en un producto (no creados en Productos > Atributos) no son taxonomías. WooCommerce los guarda dentro de un único campo meta serializado, por lo que no aparecen en la lista. Usa un atributo global, o una columna personalizada como se muestra arriba.
Tipos de contenido personalizados, como los elementos de portfolio
WOOT crea tablas solo de productos de WooCommerce. Para un portfolio, eventos o cualquier otro tipo de contenido, usa su plugin hermano TableOn (posts-table.com), construido sobre el mismo motor. ACF funciona allí de la misma manera: una pestaña Meta para los campos simples y hooks propios para los tipos de campo indicados arriba como «requiere código».
Si la columna sigue vacía
- Compara la clave meta letra por letra con el Nombre del campo (Field Name) de ACF; las claves distinguen mayúsculas de minúsculas y no deben contener espacios.
- Abre un producto que tenga un valor y comprueba que está guardado ahí, y no solo mostrado en la página del producto por una plantilla.
- Asegúrate de que la fila de la pestaña Meta tiene un tipo y de que la columna está en Activo (Active) en la misma tabla cuyo shortcode está en la página.
- Una celda con un número en lugar de una imagen o un título indica un campo que guarda ID; una celda con
field_…indica la clave con guion bajo. - Vacía cualquier caché de páginas tras cambiar el fragmento y revisa el registro de errores de PHP si toda la tabla deja de cargarse después de añadirlo.
Si un campo sigue sin mostrarse, abre un tema en el foro de soporte de WOOT con el tipo de campo ACF, la clave meta y el shortcode de la tabla.