Новий API WP_Customize - як це працює під кришкою?


16

Я помітив, що якщо ви вносите зміни через нову функцію "налаштувати", коли ви переходите на іншу сторінку в документі попереднього перегляду iframe, ваші зміни все ще застосовуються, навіть якщо вони не збережені.

Схоже, WP десь зберігає тимчасові зміни, і застосовує їх на сайті, якщо сайт переглядається в режимі «налаштувати».

Але як сайт знає, що він перебуває у налаштованому режимі? Тому що я не бачу жодних аргументів запиту, доданих до посилань чи чогось подібного.

Відповіді:


9

Тут є декілька бітів, але це короткий код у цьому 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 заважає фактично працювати посиланнями. Наступний код потім надсилає повідомлення вгору, повідомляючи його на a) прокрутіть назад вгорі сторінки та b) змініть URL-адресу.

Причина повідомлень тут полягає в тому, що немає лише одного iframe, є два. Сторінка, на яку ви натиснули, насправді завантажується всередину іншої рамки з доданими до неї налаштуваннями налаштованого інструмента (через POSTдійсно), тоді ефект зникання використовується для вицвітання старого та безперешкодного вицвітання нового. Це не дозволяє екрану стати білим і некрасивим і блимати при переході на нову сторінку.

Також виключається необхідність фільтрації та подібного коду теми та потенційно змінювати зовнішній вигляд сторінки. Тема, таким чином, відображається такою, яка є, без суттєвих змін у її змісті.

Подібний код існує там, щоб запобігти роботі надсилання форми (він просто нічого не робить) тощо.

Фільтр для перехоплення та обробки значень налаштування в class-wp-customize-setting.php. preview()Функція додає фільтри , необхідні для обробки вхідних значень, то _preview_filter()функція є те , що фільтр. Він просто приймає get_option()або get_theme_mod()дзвінки, помічає, коли вони мають бути змінені параметри, і замість цього повертає змінені значення.


1

Ви помітите, що натискаючи посилання у вікні попереднього перегляду налаштування, запит, що генерується, - це POSTзапит, а не звичайний GET. Здається, що налаштовувач переважає будь-яке клацання посилання та робить POSTзамість цього такі дані форми:

wp_customize: on
theme: themename
customized: {json-encoded-options-here}
customize_messenger_channel: preview-1

Налаштувати поле , що містить опції , які ви змінили, так що , коли дані передаються через до вашої теми. Код налаштування потім перехоплює (через фільтр, я не впевнений, який саме) параметри вашої теми, коли вони запитуються, і замінює їх значеннями у налаштованому параметрі.


2
Погляньте тут: /wp-includes/class-wp-customize-manager.php
brasofilo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.