Aquí hay algunos bits que se aplican, pero lo que falta es este código en customize-preview.js
:
this.body.on( 'click.preview', 'a', function( event ) {
event.preventDefault();
self.send( 'scroll', 0 );
self.send( 'url', $(this).prop('href') );
});
El evento.preventDefault evita que los enlaces funcionen realmente. El siguiente código luego envía un mensaje hacia arriba indicando que a) se desplaza a la parte superior de la página yb) cambia la URL.
El motivo de la mensajería aquí es porque no hay solo un iframe, hay dos. La página en la que hizo clic se carga realmente dentro de otro iframe con las configuraciones del personalizador agregadas a ella (a través de POST
de hecho), luego se usa un efecto de fundido para desvanecer el antiguo y desaparecer en el nuevo sin problemas. Esto evita que la pantalla se vuelva blanca y fea y parpadee cuando cambia a la nueva página.
También elimina la necesidad de realizar un filtrado y tal en el código del tema y, potencialmente, modificar el aspecto de la página. Por lo tanto, el tema se muestra como está, sin cambios significativos en el contenido del mismo.
Existe un código similar allí para evitar que el envío del formulario funcione (simplemente no hace nada) y así sucesivamente.
El filtro para interceptar y manejar los valores del personalizador está en class-wp-customize-setting.php
. La función preview()
agrega los filtros necesarios para manejar los valores entrantes, la función _preview_filter()
es ese filtro. Simplemente toma las llamadas get_option()
o get_theme_mod()
, avisa cuando se supone que deben ser opciones modificadas y devuelve los valores modificados.