Hooks principales
Un plugin de WordPress se conecta al funcionamiento del sistema mediante hooks, que pueden ser:
- Actions (acciones): para ejecutar funciones en momentos concretos.
- Filters (filtros): para modificar datos antes de que se usen o muestren.
Este plugin hace uso de acciones clave de WooCommerce y WordPress para integrarse con el sistema de productos.
Hooks usados en este plugin
1. admin_enqueue_scripts
Usado para cargar archivos CSS o JS en el backend, pero solo cuando estamos en la edición de productos:
add_action('admin_enqueue_scripts', 'scp_cargar_scripts_estilos_backend');
Dentro de la función se verifica que la pantalla activa sea product o edit-product, y se cargan los scripts personalizados y la biblioteca de medios.
2. woocommerce_product_options_general_product_data
Este hook sirve para mostrar campos personalizados en la pestaña "General" de la edición del producto:
add_action('woocommerce_product_options_general_product_data', 'scp_agregar_campos_personalizados_completos');
En la función asociada se utilizan funciones como woocommerce_wp_text_input, woocommerce_wp_checkbox, woocommerce_wp_textarea_input, etc.
Referencia en WooCommerce Docs
3. woocommerce_process_product_meta
Este hook se usa para guardar los metadatos cuando el producto se guarda desde el backend:
add_action('woocommerce_process_product_meta', 'scp_guardar_campos_con_color_completo');
En esta función se verifica el nonce de seguridad y se almacenan todos los campos personalizados con update_post_meta().
Documentación oficial de WordPress
4. wp_footer
Este hook se usa para insertar JavaScript personalizado al final del <body>, pero solo en ciertas páginas (como la de productos con filtros):
add_action('wp_footer', 'scp_agregar_js_cambia_logo_marcas');
Consideraciones
- Es buena práctica envolver todas las funciones con prefijos (como
scp_) para evitar colisiones. - Evita ejecutar funciones globalmente: restringe su uso solo donde es necesario (por ejemplo, con
is_page()oget_current_screen()). - Para plugins más avanzados, podrías usar clases en lugar de funciones sueltas.