Campos personalizados

Una de las funcionalidades clave de este plugin es la posibilidad de extender los productos de WooCommerce mediante campos personalizados (también llamados "metacampos"). Estos campos permiten añadir datos adicionales que no vienen por defecto en los productos.

En esta nota explicamos:


Registro de campos

Los campos se añaden mediante el hook:

add_action('woocommerce_product_options_general_product_data', 'nombre_funcion');

Dentro de esa función se utilizan funciones específicas de WooCommerce:

📌 Campo de texto

woocommerce_wp_text_input([
  'id' => 'codigo_producto',
  'label' => __('Código del producto', 'mi-plugin'),
  'description' => __('Introduce el código único del producto.', 'mi-plugin'),
  'type' => 'text'
]);

Este campo aparecerá en la pestaña "General" del producto y recogerá el valor como un string.


📌 Área de texto (textarea)

woocommerce_wp_textarea_input([
  'id' => 'ingredientes_producto',
  'label' => __('Ingredientes', 'mi-plugin'),
  'description' => __('Lista de ingredientes del producto.', 'mi-plugin'),
  'value' => get_post_meta($post->ID, 'ingredientes_producto', true),
  'rows' => 4
]);

Se utiliza para textos más largos, como ingredientes, instrucciones o notas.


📌 Campo checkbox (sí/no)

woocommerce_wp_checkbox([
  'id' => 'para_freidora',
  'label' => __('Apto para freidora', 'mi-plugin'),
  'description' => __('Marca esta opción si el producto se prepara en freidora.', 'mi-plugin'),
  'value' => get_post_meta($post->ID, 'para_freidora', true)
]);

Los checkbox se guardan como 'yes' o 'no'.


📌 Campo de selección (select)

woocommerce_wp_select([
  'id' => 'marca_producto',
  'label' => __('Marca', 'mi-plugin'),
  'description' => __('Selecciona la marca del producto.', 'mi-plugin'),
  'options' => [
    '' => __('Selecciona una marca', 'mi-plugin'),
    'Marca1' => 'Marca1',
    'Marca2' => 'Marca2'
  ],
  'value' => get_post_meta($post->ID, 'marca_producto', true)
]);

Ideal para categorizar productos según marcas, tipos, etc.


Guardar los datos

Los datos se guardan en el hook:

add_action('woocommerce_process_product_meta', 'nombre_funcion_guardado');

✅ Guardado seguro con verificación de nonce:

if (!isset($_POST['mi_nonce']) || !wp_verify_nonce($_POST['mi_nonce'], 'mi_accion_nonce')) {
  return;
}

✅ Guardado de texto:

if (!empty($_POST['codigo_producto'])) {
  update_post_meta($post_id, 'codigo_producto', sanitize_text_field($_POST['codigo_producto']));
} else {
  delete_post_meta($post_id, 'codigo_producto');
}

✅ Guardado de checkbox:

$para_freidora = isset($_POST['para_freidora']) ? 'yes' : 'no';
update_post_meta($post_id, 'para_freidora', $para_freidora);

Buenas prácticas


Recursos externos

04 Shortcodes