Existem alguns bits aqui aplicáveis, mas o mais curto é esse código em customize-preview.js
:
this.body.on( 'click.preview', 'a', function( event ) {
event.preventDefault();
self.send( 'scroll', 0 );
self.send( 'url', $(this).prop('href') );
});
O event.preventDefault impede que os links realmente funcionem. O código a seguir envia uma mensagem de volta para cima informando a) a) rolar de volta para o topo da página eb) alterar o URL.
A razão para as mensagens aqui é porque não há apenas um iframe, há dois. A página em que você clicou é carregada dentro de outro iframe com as configurações do personalizador adicionadas a ela (via um POST
fato), então um efeito de desbotamento é usado para desbotar a antiga e desbotar a nova perfeitamente. Isso evita que a tela fique branca e feia e pisque quando mudar para a nova página.
Também elimina a necessidade de fazer filtragem no código do tema e potencialmente modificar a aparência da página. O tema é, assim, exibido como está, sem alterações significativas no conteúdo.
Existe um código semelhante para impedir que o envio do formulário funcione (ele simplesmente não faz nada) e assim por diante.
O filtro para interceptar e manipular os valores do personalizador está em class-wp-customize-setting.php
. A preview()
função adiciona os filtros necessários para lidar com os valores recebidos, a _preview_filter()
função é esse filtro. Ele simplesmente recebe as chamadas get_option()
ou get_theme_mod()
, percebe quando elas devem ser modificadas e, em vez disso, retorna os valores modificados.
/wp-includes/class-wp-customize-manager.php
...