Hay algunos bits aquí que se aplican, pero en resumen 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') );
});
Event.preventDefault impide que los enlaces funcionen realmente. El siguiente código luego envía un mensaje hacia arriba diciéndole que a) se desplace hacia la parte superior de la página yb) cambie la URL.
La razón del mensaje aquí es porque no hay un solo iframe, hay dos. La página en la que hizo clic se carga realmente dentro de otro iframe con la configuración del personalizador agregada (a través de un POST
hecho), luego se usa un efecto de desvanecimiento para desvanecer el antiguo y desvanecerse en el nuevo sin problemas. Esto evita que la pantalla se ponga blanca, fea y parpadee cuando cambia a la nueva página.
También elimina la necesidad de filtrar y tal en el código del tema y potencialmente modificar el aspecto de la página. El tema se muestra como está, sin cambios significativos en el contenido del mismo.
Existe un código similar para evitar que el envío de formularios 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 preview()
función agrega los filtros necesarios para manejar los valores entrantes, la _preview_filter()
función es ese filtro. Simplemente toma las llamadas get_option()
o get_theme_mod()
, los avisos cuando se supone que son opciones modificadas y en su lugar devuelve los valores modificados.
/wp-includes/class-wp-customize-manager.php
...