Здесь есть несколько битов, которые применимы, но суть в следующем 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 предотвращает фактическую работу ссылок. Следующий код затем отправляет сообщение обратно вверх, сообщая ему: а) прокрутить назад до верхней части страницы и б) изменить URL.
Причина сообщения здесь в том, что существует не один iframe, а два. Страница, по которой вы щелкнули, на самом деле загружается внутри другого iframe с добавленными в него настройками из настройщика (с помощью POST
действительно), затем используется эффект постепенного исчезновения, чтобы плавно исчезнуть старый и новый. Это предотвращает появление белого, уродливого и мигающего экрана при переключении на новую страницу.
Также устраняет необходимость выполнять фильтрацию и тому подобное по коду темы и потенциально изменять внешний вид страницы. Таким образом, тема отображается как есть, без существенных изменений в ее содержании.
Подобный код существует там, чтобы запретить отправку формы (она просто ничего не делает) и так далее.
Фильтр для перехвата и обработки значений настройщика находится в class-wp-customize-setting.php
. preview()
Функция добавляет фильтры , необходимые для обработки входящих значений, то _preview_filter()
функция является то , что фильтр. Он просто принимает вызовы get_option()
or get_theme_mod()
, замечает, когда они должны быть изменены, и вместо этого возвращает измененные значения.
/wp-includes/class-wp-customize-manager.php
...