WPCode -> Agregar fragmento -> **Fragmento de PHP** Insercion automatica -> **Ejecutar en todas partes** (NO es un fragmento de HTML como los otros: es PHP.) COMO GUARDA En una opcion de la propia base de datos del sitio (nm_td_citas). No usa servicios externos, no crea tablas y no necesita ningun plugin de reservas. QUE GUARDA, Y QUE NO Solo fecha, hora y vehiculo. NO guarda nombre, correo ni celular: la lista se publica en una direccion abierta para que la pagina la pueda leer, y ahi no puede haber datos de nadie. Los datos del cliente siguen viajando unicamente por correo, como hasta ahora. CUANDO SE MARCA UN CUPO Cuando Contact Form 7 confirma que ENVIO el correo. Se hace en el servidor a proposito: asi el cupo refleja exactamente lo que se envio, y nadie puede marcar cupos falsos desde el navegador. SI ALGO SALE MAL Se desactiva el fragmento en WPCode y el sitio queda como estaba. La pagina de test drive esta hecha para seguir funcionando aunque esta parte no responda: simplemente deja de bloquear cupos. ============================================================ */ if ( ! defined( 'ABSPATH' ) ) { return; } /* ------------------------------------------------------------ 1. LEER Y LIMPIAR Cada vez que se lee, se botan las citas de dias que ya pasaron. Por eso la lista nunca crece sin control y "se reinicia sola": el lunes ya no quedan las citas de la semana anterior. ------------------------------------------------------------ */ function nm_td_leer_citas() { $citas = get_option( 'nm_td_citas', array() ); if ( ! is_array( $citas ) ) { $citas = array(); } $hoy = current_time( 'Y-m-d' ); $vivas = array(); foreach ( $citas as $c ) { if ( ! empty( $c['fecha'] ) && $c['fecha'] >= $hoy ) { $vivas[] = $c; } } /* Solo se reescribe si de verdad cambio, para no escribir en la base de datos en cada visita a la pagina. */ if ( count( $vivas ) !== count( $citas ) ) { update_option( 'nm_td_citas', array_values( $vivas ), false ); } return array_values( $vivas ); } /* ------------------------------------------------------------ 2. MARCAR EL CUPO CUANDO SE ENVIA EL FORMULARIO ------------------------------------------------------------ */ add_action( 'wpcf7_mail_sent', 'nm_td_marcar_cupo' ); function nm_td_marcar_cupo( $formulario ) { if ( ! class_exists( 'WPCF7_Submission' ) ) { return; } $envio = WPCF7_Submission::get_instance(); if ( ! $envio ) { return; } $datos = $envio->get_posted_data(); /* Contact Form 7 a veces entrega los desplegables como arreglo de un solo elemento, y a veces como texto. Se acepta lo que llegue. */ $sacar = function( $v ) { if ( is_array( $v ) ) { $v = reset( $v ); } return sanitize_text_field( (string) $v ); }; $fecha = isset( $datos['fecha'] ) ? $sacar( $datos['fecha'] ) : ''; $hora = isset( $datos['hora'] ) ? $sacar( $datos['hora'] ) : ''; $vehiculo = isset( $datos['vehiculo'] ) ? $sacar( $datos['vehiculo'] ) : ''; /* Si el formulario no trae los tres campos, no es el de test drive (el sitio tiene otros formularios): no se toca nada. */ if ( '' === $fecha || '' === $hora || '' === $vehiculo ) { return; } if ( ! preg_match( '/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/', $fecha ) ) { return; } $citas = nm_td_leer_citas(); /* Si por alguna razon llega dos veces el mismo envio, no se duplica la linea. */ foreach ( $citas as $c ) { if ( $c['fecha'] === $fecha && $c['hora'] === $hora && $c['vehiculo'] === $vehiculo ) { return; } } $citas[] = array( 'fecha' => $fecha, 'hora' => $hora, 'vehiculo' => $vehiculo, 'creada' => current_time( 'mysql' ), ); update_option( 'nm_td_citas', $citas, false ); } /* ------------------------------------------------------------ 3. LA DIRECCION QUE LEE LA PAGINA https://www.novamotors.com.co/wp-json/novamotors/v1/testdrive Devuelve solo f (fecha), h (hora) y v (vehiculo). ------------------------------------------------------------ */ add_action( 'rest_api_init', 'nm_td_registrar_ruta' ); function nm_td_registrar_ruta() { register_rest_route( 'novamotors/v1', '/testdrive', array( 'methods' => 'GET', 'callback' => 'nm_td_responder', 'permission_callback' => '__return_true', ) ); } function nm_td_responder() { $citas = nm_td_leer_citas(); $salida = array(); foreach ( $citas as $c ) { $salida[] = array( 'f' => $c['fecha'], 'h' => $c['hora'], 'v' => $c['vehiculo'], ); } $respuesta = rest_ensure_response( array( 'citas' => $salida ) ); /* Sin cache: si el hosting guardara esta respuesta, la pagina mostraria cupos viejos. */ $respuesta->header( 'Cache-Control', 'no-store, max-age=0' ); return $respuesta; } /* ------------------------------------------------------------ 4. PANTALLA EN EL ESCRITORIO DE WORDPRESS Sirve para lo que el sistema solo no puede saber: que un cliente llamo a cancelar. Ahi se libera el cupo a mano. Aparece en el menu de la izquierda como "Test drive". ------------------------------------------------------------ */ add_action( 'admin_menu', 'nm_td_menu' ); function nm_td_menu() { add_menu_page( 'Cupos de test drive', 'Test drive', 'edit_posts', 'nm-testdrive', 'nm_td_pantalla', 'dashicons-calendar-alt', 26 ); } function nm_td_pantalla() { if ( ! current_user_can( 'edit_posts' ) ) { return; } /* Liberar un cupo */ if ( isset( $_POST['nm_td_liberar'] ) && check_admin_referer( 'nm_td_accion' ) ) { $quitar = sanitize_text_field( wp_unslash( $_POST['nm_td_liberar'] ) ); $citas = nm_td_leer_citas(); $nuevas = array(); foreach ( $citas as $c ) { if ( $c['fecha'] . '|' . $c['hora'] . '|' . $c['vehiculo'] !== $quitar ) { $nuevas[] = $c; } } update_option( 'nm_td_citas', array_values( $nuevas ), false ); echo '

Cupo liberado. Ya vuelve a aparecer disponible en la página.

'; } /* Vaciar todo */ if ( isset( $_POST['nm_td_vaciar'] ) && check_admin_referer( 'nm_td_accion' ) ) { update_option( 'nm_td_citas', array(), false ); echo '

Se vaciaron todos los cupos.

'; } $citas = nm_td_leer_citas(); /* Se ordenan por fecha y hora para que se lean como una agenda */ usort( $citas, function ( $a, $b ) { if ( $a['fecha'] === $b['fecha'] ) { return strcmp( $a['hora'], $b['hora'] ); } return strcmp( $a['fecha'], $b['fecha'] ); } ); echo '
'; echo '

Cupos de test drive

'; echo '

Estas son las franjas que la página ya no ofrece porque alguien las agendó. '; echo 'Si un cliente cancela, libera aquí el cupo para que vuelva a quedar disponible.

'; echo '

Las citas de días que ya pasaron desaparecen solas: no hay que borrarlas.

'; if ( empty( $citas ) ) { echo '

No hay cupos ocupados en este momento.

'; return; } echo '
'; wp_nonce_field( 'nm_td_accion' ); echo ''; echo ''; echo ''; $dias = array( 'domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado' ); foreach ( $citas as $c ) { $marca = strtotime( $c['fecha'] ); $nombre = false !== $marca ? $dias[ (int) gmdate( 'w', $marca ) ] : ''; $llave = $c['fecha'] . '|' . $c['hora'] . '|' . $c['vehiculo']; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; } echo '
FechaHoraVehículoSe agendó
' . esc_html( $c['fecha'] ) . ' (' . $nombre . ')' . esc_html( $c['hora'] ) . '' . esc_html( $c['vehiculo'] ) . '' . esc_html( isset( $c['creada'] ) ? $c['creada'] : '' ) . '
'; echo '

'; echo ''; echo '

'; echo '
'; }
Agendar cita de taller

Usados Toyota

Spread the love
UsadosToyota
Vehículos Usados Toyota inspeccionados bajo estrictos estándares de calidad, cuidadosamente revisados para brindarte confianza, seguridad y tranquilidad en tu compra.
Ver inventario completo en Mercado Libre
Usado Toyota
Corolla Sedan XLI
Año

2023

Marca

Toyota

Modelo

CorollaCross

Color

Celeste

Combustible

Híbrido

Placa

9 Chia

Transmisión

Automática

Kilómetros

76.000 km

$90.000.000
Asesoría Personalizada
Usado Toyota
FORTUNER 2,7 GAS
Año

2020

Marca

Toyota

Modelo

Fortuner

Color

Plata

Combustible

Gasolina

Placa

9 Bogota

Transmisión

Automática

Kilómetros

61.000 km

$178.000.000
Asesoría Personalizada
Usado Toyota
RAV4 XLE HEV
Año

2021

Marca

Toyota

Modelo

RAV4

Color

Azul

Combustible

Hibrido

Placa

4 Bogota

Transmisión

Automática

Kilómetros

56.000 km

$165.000.000
Asesoría Personalizada
Usado Toyota
Fortuner 2.4 SRV 4X2 BLINDADO II
Año

2024

Marca

Toyota

Modelo

FORTUNER

Color

Plata

Combustible

Diesel

Placa

4 Bogotá

Transmisión

Automática

Kilómetros

13.098 km

$300.000.000
Asesoría Personalizada
Usado Toyota
4RUNNER
Año

2018

Marca

Toyota

Modelo

4RUNNER

Color

Gris

Combustible

Gasolina

Placa

6 Bogota

Transmisión

Automática

Kilómetros

182.000 km

$165.000.000
Asesoría Personalizada
Usado Toyota
Prado VX DSL
Año

2017

Marca

Toyota

Modelo

Prado

Color

Negro

Combustible

Diésel

Placa

6 Bogota

Transmisión

Automática

Kilómetros

280.436 km

$202.000.000
Asesoría Personalizada
Usado Toyota
FJ40 Carpado
Año

1972

Marca

Toyota

Modelo

Land Cruiser

Color

Amarillo

Combustible

Gasolina

Placa

8 Cota

Transmisión

Mecanico

Kilómetros

120.000 km

$50.000.000
Asesoría Personalizada
Usado Toyota
Prado TX Modificado
Año

2013

Marca

Toyota

Modelo

Land Cruiser

Color

Blanco

Combustible

Diesel

Placa

3 Bogota

Transmisión

Automatico

Kilómetros

142.000 km

$50.000.000
Asesoría Personalizada
Usado Toyota
FJ40 Carpado Modificado
Año

1977

Marca

Toyota

Modelo

Land Cruiser

Color

Amarillo

Combustible

Gasolina

Placa

6 Rosa De Viterbo

Transmisión

Mecanico

Kilómetros

110.212 km

$48.000.000
Asesoría Personalizada

// Visítanos //