functions.php

El archivo functions.php es el cerebro del tema WordPress. Se carga automáticamente en cada petición junto con el tema activo y funciona como un plugin: puedes añadir hooks, registrar menús, cargar assets, definir funciones propias y mucho más.

¿Qué va en functions.php?

  • La función de setup del tema (hook after_setup_theme)
  • Carga de scripts y estilos (hook wp_enqueue_scripts)
  • Registro de sidebars y áreas de widgets
  • Funciones auxiliares propias del tema
  • Personalizaciones del Customizer
  • Sobrescritura de funciones del tema padre (en temas hijo)

Estructura recomendada

<?php
// 1. Setup del tema
add_action( 'after_setup_theme', 'mi_tema_setup' );
function mi_tema_setup() {
    add_theme_support( 'title-tag' );
    add_theme_support( 'post-thumbnails' );
    register_nav_menus([
        'primary' => __( 'Menú principal', 'mi-tema' ),
    ]);
}

// 2. Assets
add_action( 'wp_enqueue_scripts', 'mi_tema_assets' );
function mi_tema_assets() {
    wp_enqueue_style( 'mi-tema', get_stylesheet_uri(), [], wp_get_theme()->get('Version') );
    wp_enqueue_script( 'mi-tema-js', get_template_directory_uri() . '/js/main.js', [], '1.0', true );
}

// 3. Funciones auxiliares
function mi_tema_get_color_primario() {
    return get_theme_mod( 'color_primario', '#336699' );
}

Buena práctica: dividir en archivos

Cuando functions.php crece, divídelo en archivos separados e inclúyelos con require_once:

// functions.php
require_once get_template_directory() . '/inc/setup.php';
require_once get_template_directory() . '/inc/enqueue.php';
require_once get_template_directory() . '/inc/cpt.php';
require_once get_template_directory() . '/inc/helpers.php';

Diferencia con un plugin

El código en functions.php solo está activo mientras ese tema esté activo. Si cambias de tema, desaparece. Para funcionalidad que debe sobrevivir al cambio de tema (CPTs, opciones globales), usa un plugin.