Indicaciones del cliente: adopción solo Perros/Gatos, fichas nuevas y todo configurable

- Adopción sin filtros ni etiquetas: acceso a Perros y Gatos, tarjetas de foto y nombre.
- Ficha nueva: galería, vídeo, fecha de nacimiento o edad aproximada, carácter,
  necesidades, convivencia y hogar que buscamos (textos por idioma, datos compartidos).
- Estados disponible / en proceso / adoptado y animales destacados.
- Botón «Quiero conocerlo/la» con formulario breve (animal incluido) y confirmación.
- Botones para compartir cada ficha (WhatsApp, Facebook, copiar enlace).
- Portada corta según la propuesta del cliente; donaciones, cifras, etc. ocultas.
- Páginas Acoge y Preguntas frecuentes, menú con submenús, sin hotel.
- Aviso de cita previa y lista de ayuda material editables desde el panel.
- Plugin núcleo dividido en módulos (i18n, animales, formularios, APIs).
- Migración 5 idempotente: respeta las páginas editadas por el cliente.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-24 22:16:24 +02:00
parent 532bc620de
commit 4acc8b62d1
41 changed files with 1985 additions and 1533 deletions

View File

@@ -0,0 +1,118 @@
<?php
/**
* Idioma (castellano / euskera), datos de la protectora y ajustes.
*/
defined( 'ABSPATH' ) || exit;
/** Idioma actual: 'es' o 'eu'. El panel de administración siempre en castellano. */
function ga_lang() {
if ( isset( $GLOBALS['ga_forced_lang'] ) ) {
return 'eu' === $GLOBALS['ga_forced_lang'] ? 'eu' : 'es';
}
if ( is_admin() && ! wp_doing_ajax() ) {
return 'es';
}
$lang = function_exists( 'pll_current_language' ) ? pll_current_language() : '';
return 'eu' === $lang ? 'eu' : 'es';
}
/** Devuelve el texto en el idioma actual. */
function ga__( $es, $eu ) {
return 'eu' === ga_lang() ? $eu : $es;
}
/** Imprime el texto escapado en el idioma actual. */
function ga_e( $es, $eu ) {
echo esc_html( ga__( $es, $eu ) );
}
/** Ejecuta $callback como si el idioma actual fuera $lang. */
function ga_with_lang( $lang, callable $callback ) {
$previous = $GLOBALS['ga_forced_lang'] ?? null;
$GLOBALS['ga_forced_lang'] = $lang;
try {
return $callback();
} finally {
if ( null === $previous ) {
unset( $GLOBALS['ga_forced_lang'] );
} else {
$GLOBALS['ga_forced_lang'] = $previous;
}
}
}
/** URL de una página por su slug en castellano, en el idioma actual. */
function ga_page_url( $slug_es, $fragment = '' ) {
$page = get_page_by_path( $slug_es );
if ( ! $page ) {
return home_url( "/$slug_es/" ) . $fragment;
}
$id = $page->ID;
if ( function_exists( 'pll_get_post' ) ) {
$id = pll_get_post( $id, ga_lang() ) ?: $id;
}
return get_permalink( $id ) . $fragment;
}
/** URL del listado de una especie (slug en castellano: perro, gato) en el idioma actual. */
function ga_species_url( $slug_es ) {
$term = get_term_by( 'slug', $slug_es, 'especie' );
if ( $term && function_exists( 'pll_get_term' ) ) {
$translated = pll_get_term( $term->term_id, ga_lang() );
$term = $translated ? get_term( $translated, 'especie' ) : $term;
}
$url = $term && ! is_wp_error( $term ) ? get_term_link( $term ) : '';
return is_wp_error( $url ) || ! $url ? get_post_type_archive_link( 'animal' ) : $url;
}
/* Animales y especies son traducibles; los mensajes no. */
add_filter( 'pll_get_post_types', function ( $types ) {
$types['animal'] = 'animal';
unset( $types['ga_mensaje'] );
return $types;
} );
add_filter( 'pll_get_taxonomies', function ( $taxonomies ) {
$taxonomies['especie'] = 'especie';
return $taxonomies;
} );
/**
* Ajuste del personalizador del tema, con valor por defecto si el tema no está activo.
*/
function ga_setting( $section, $field, $default = '' ) {
if ( function_exists( 'ga_opt' ) ) {
$value = ga_opt( $section, $field );
return null === $value ? $default : $value;
}
return $default;
}
/* -------------------------------------------------------------------------
* Datos de la protectora (el tema los sustituye por los del personalizador)
* ---------------------------------------------------------------------- */
function ga_info( $key = null ) {
$info = apply_filters( 'ga_info', array(
'nombre' => 'Bilagun',
'direccion' => 'Jaizubia, 44 · 20280 Hondarribia (Gipuzkoa)',
'telefono' => '943 64 52 79',
'email' => 'hola@gureametsabilagun.org',
'horario' => ga__( 'Lunes a viernes: 10:00–13:00 y 14:00–19:00', 'Astelehenetik ostiralera: 10:00–13:00 eta 14:00–19:00' ),
'cita' => ga__( 'Atendemos con cita previa. Escríbenos o llámanos antes de venir.', 'Aurretiko hitzorduarekin artatzen dugu. Idatzi edo deitu iezaguzu etorri aurretik.' ),
'instagram' => 'https://www.instagram.com/gureametsabilagun/',
'facebook' => 'https://www.facebook.com/gureametsabilagun/',
'maps' => 'https://www.google.com/maps/search/?api=1&query=Jaizubia+44+Hondarribia',
) );
return $key ? ( $info[ $key ] ?? '' ) : $info;
}
/** Correo que recibe los formularios: ajuste del panel → variable GA_CONTACT_EMAIL → administrador. */
function ga_contact_email() {
$email = ga_setting( 'adopcion', 'form_email', '' );
if ( ! is_email( $email ) ) {
$email = getenv( 'GA_CONTACT_EMAIL' );
}
return is_email( $email ) ? $email : get_option( 'admin_email' );
}