prueba

prefix . “etrs_eventos”; $charset = $wpdb->get_charset_collate(); $sql = “CREATE TABLE $tabla ( id mediumint(9) NOT NULL AUTO_INCREMENT, titulo varchar(200) NOT NULL, fecha date NOT NULL, hora varchar(20), lugar varchar(200), descripcion text, url varchar(300), organizador varchar(200), telefono varchar(50), imagen varchar(350), PRIMARY KEY (id) ) $charset;”; require_once(ABSPATH . ‘wp-admin/includes/upgrade.php’); dbDelta($sql); }); /* ─────────────────────────────── 2) SHORTCODE PRINCIPAL ──────────────────────────────── */ add_shortcode(“tr_agenda”, function() { global $wpdb; $tabla = $wpdb->prefix . “etrs_eventos”; $mensaje_exito = “”; if (isset($_GET[‘etrs_exito’]) && $_GET[‘etrs_exito’] == ‘1’) { $mensaje_exito = “
¡Tu evento fue enviado con éxito!
“; } $filtro_organizador = isset($_GET[‘organizador’]) ? sanitize_text_field($_GET[‘organizador’]) : ”; /* ORDEN CORREGIDO: eventos más próximos primero */ if ($filtro_organizador) { $eventos = $wpdb->get_results($wpdb->prepare(” SELECT * FROM $tabla WHERE LOWER(organizador) = LOWER(%s) ORDER BY CASE WHEN fecha >= CURDATE() THEN 0 ELSE 1 END, ABS(DATEDIFF(fecha, CURDATE())) ASC, id DESC “, $filtro_organizador)); } else { $eventos = $wpdb->get_results(” SELECT * FROM $tabla ORDER BY CASE WHEN fecha >= CURDATE() THEN 0 ELSE 1 END, ABS(DATEDIFF(fecha, CURDATE())) ASC, id DESC “); } ob_start(); ?>

Cargar un evento

get_row(“SELECT * FROM $tabla WHERE id = $id”); if ($evento) { $meses = [1=>”enero”,2=>”febrero”,3=>”marzo”,4=>”abril”,5=>”mayo”,6=>”junio”,7=>”julio”,8=>”agosto”, 9=>”septiembre”,10=>”octubre”,11=>”noviembre”,12=>”diciembre”]; $dias_semana = [“Monday”=>”Lunes”,”Tuesday”=>”Martes”,”Wednesday”=>”Miércoles”, “Thursday”=>”Jueves”,”Friday”=>”Viernes”,”Saturday”=>”Sábado”,”Sunday”=>”Domingo”]; $ts = strtotime($evento->fecha); $fecha_larga = $dias_semana[date(“l”,$ts)] . ” ” . date(“d”,$ts) . ” de ” . $meses[(int)date(“m”,$ts)] . ” de ” . date(“Y”,$ts); echo “

$evento->titulo

📅 Fecha: $fecha_larga

“; if ($evento->hora) echo “

🕒 Hora: $evento->hora

“; if ($evento->lugar) echo “

📍 Lugar: $evento->lugar

“; if ($evento->organizador) echo “

👤 Organiza: $evento->organizador

“; if ($evento->telefono) echo “

📞 Contacto: $evento->telefono

“; echo “

$evento->descripcion

“; if ($evento->url) echo “

🔗 Enlace: imagen’ style=’max-width:100%;border-radius:8px;’>”; echo “

“; echo “

← Volver a la agenda

“; return ob_get_clean(); } } ?>

Agenda No hay eventos cargados.

“; } else { foreach ($eventos as $e) { $link = site_url(“/agenda/?evento_id=” . $e->id); $ts = strtotime($e->fecha); $dias = [ “Monday”=>”lunes”,”Tuesday”=>”martes”,”Wednesday”=>”miércoles”, “Thursday”=>”jueves”,”Friday”=>”viernes”,”Saturday”=>”sábado”,”Sunday”=>”domingo” ]; $meses = [ 1=>”enero”,2=>”febrero”,3=>”marzo”,4=>”abril”,5=>”mayo”,6=>”junio”, 7=>”julio”,8=>”agosto”,9=>”septiembre”,10=>”octubre”, 11=>”noviembre”,12=>”diciembre” ]; $fecha_larga = $dias[date(“l”,$ts)] . ” ” . date(“d”,$ts) . ” de ” . $meses[(int)date(“m”,$ts)] . ” de ” . date(“Y”,$ts); echo “
“; return ob_get_clean(); } /* ─────────────────────────────── 3) GUARDAR EVENTO + MAIL ──────────────────────────────── */ add_action(“template_redirect”, function() { if (!isset($_POST[“etrs_enviar”])) return; global $wpdb; $tabla = $wpdb->prefix . “etrs_eventos”; $ruta_imagen = “”; if (!empty($_FILES[‘imagen’][‘name’])) { $upload = wp_handle_upload($_FILES[‘imagen’], [‘test_form’ => false]); if (!isset($upload[‘error’])) $ruta_imagen = esc_url($upload[‘url’]); } $wpdb->insert($tabla, [ “titulo” => sanitize_text_field($_POST[“titulo”]), “fecha” => sanitize_text_field($_POST[“fecha”]), “hora” => sanitize_text_field($_POST[“hora”]), “lugar” => sanitize_text_field($_POST[“lugar”]), “descripcion” => sanitize_textarea_field($_POST[“descripcion”]), “url” => sanitize_text_field($_POST[“url”]), “organizador” => sanitize_text_field($_POST[“organizador”]), “telefono” => sanitize_text_field($_POST[“telefono”]), “imagen” => $ruta_imagen ]); wp_mail( “turismorock@gmail.com”, “Nuevo evento enviado a la Agenda TR”, “Se ha enviado un nuevo evento:\n\nTítulo: {$_POST[‘titulo’]}\nFecha: {$_POST[‘fecha’]}\nLugar: {$_POST[‘lugar’]}\nTeléfono: {$_POST[‘telefono’]}” ); wp_redirect(add_query_arg(“etrs_exito”, “1”, site_url(‘/agenda’))); exit; }); /* ─────────────────────────────── 4) ADMIN – LISTA DE EVENTOS ──────────────────────────────── */ add_action(‘admin_menu’, function() { add_menu_page( ‘Eventos TR’, ‘Eventos TR’, ‘manage_options’, ‘etrs_eventos’, ‘etrs_admin_page’, ‘dashicons-calendar-alt’, 6 ); }); function etrs_admin_page() { global $wpdb; $tabla = $wpdb->prefix . “etrs_eventos”; $eventos = $wpdb->get_results(” SELECT * FROM $tabla ORDER BY CASE WHEN fecha >= CURDATE() THEN 0 ELSE 1 END, ABS(DATEDIFF(fecha, CURDATE())) ASC, id DESC “); echo ‘

Eventos TR

‘; if (!$eventos) { echo “

No hay eventos cargados.

“; return; } echo ““; foreach ($eventos as $e) { echo ““; } echo “
TítuloFechaOrganizador
{$e->titulo} {$e->fecha} {$e->organizador}
“; } ?>