Theme Setup

El Theme Setup es la función de configuración del tema que se ejecuta dentro del hook after_setup_theme. Es el lugar correcto para declarar qué características soporta el tema y registrar sus recursos.

¿Por qué after_setup_theme y no init?

after_setup_theme se dispara antes que init, justo después de que el tema se ha cargado. Algunas funciones como register_nav_menus() o add_theme_support() necesitan ejecutarse en este punto temprano.

add_action( 'after_setup_theme', 'mi_tema_setup' );
function mi_tema_setup() {

    // WordPress gestiona el <title> automáticamente
    add_theme_support( 'title-tag' );

    // Activa las imágenes destacadas en posts
    add_theme_support( 'post-thumbnails' );

    // HTML5 semántico para galerías, formularios, etc.
    add_theme_support( 'html5', [
        'search-form',
        'comment-form',
        'gallery',
        'caption',
        'style',
        'script',
    ]);

    // Soporte para logo personalizado desde el Customizer
    add_theme_support( 'custom-logo', [
        'height'      => 80,
        'width'       => 200,
        'flex-height' => true,
        'flex-width'  => true,
    ]);

    // Soporte para color de fondo personalizable
    add_theme_support( 'custom-background' );

    // Registra las zonas de menú
    register_nav_menus([
        'primary' => __( 'Menú principal', 'mi-tema' ),
        'footer'  => __( 'Menú footer',    'mi-tema' ),
    ]);

    // Carga el dominio de traducción del tema
    load_theme_textdomain( 'mi-tema', get_template_directory() . '/languages' );
}

Otras características comunes

// Soporte para bloques de Gutenberg en ancho completo
add_theme_support( 'align-wide' );

// Paleta de colores en el editor de bloques
add_theme_support( 'editor-color-palette', [
    [ 'name' => 'Primario', 'slug' => 'primario', 'color' => '#336699' ],
    [ 'name' => 'Secundario', 'slug' => 'secundario', 'color' => '#ff5733' ],
]);

// Tamaños de fuente en el editor
add_theme_support( 'editor-font-sizes', [
    [ 'name' => 'Pequeño', 'slug' => 'small',  'size' => 14 ],
    [ 'name' => 'Normal',  'slug' => 'normal', 'size' => 16 ],
    [ 'name' => 'Grande',  'slug' => 'large',  'size' => 24 ],
]);