API WP_Customize mới - nó hoạt động như thế nào dưới mui xe?


16

Tôi nhận thấy rằng nếu bạn thực hiện thay đổi qua tính năng "tùy chỉnh" mới, khi bạn điều hướng trên một trang khác trong tài liệu xem trước iframe, các thay đổi của bạn vẫn được áp dụng, ngay cả khi chúng chưa được lưu.

Có vẻ như WP đang lưu trữ các thay đổi tạm thời ở đâu đó và nó sẽ áp dụng chúng trên trang web nếu trang web được xem ở chế độ "tùy chỉnh".

Nhưng làm thế nào để trang web biết nó ở chế độ tùy chỉnh? Bởi vì tôi không thấy bất kỳ đối số truy vấn nào được nối vào các liên kết hoặc bất cứ điều gì tương tự.

Câu trả lời:


9

Có một vài bit ở đây áp dụng, nhưng thiếu của nó là mã này trong 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 ngăn các liên kết thực sự hoạt động. Đoạn mã sau sẽ gửi một thông báo ngược lên trên để thông báo cho a) cuộn trở lại đầu trang và b) thay đổi URL.

Lý do cho việc nhắn tin ở đây là vì không chỉ có một iframe, có hai. Trang bạn đã nhấp thực sự được tải bên trong iframe khác với các cài đặt từ tùy biến được thêm vào nó (thông qua POSTthực tế), sau đó hiệu ứng mờ dần được sử dụng để làm mờ dần cái cũ và mờ dần trong cái mới. Điều này ngăn màn hình trở nên trắng và xấu và nhấp nháy khi chuyển sang trang mới.

Cũng loại bỏ sự cần thiết phải lọc và như vậy trên mã chủ đề và có khả năng sửa đổi giao diện của trang. Do đó, chủ đề được hiển thị như là, không có thay đổi đáng kể cho nội dung của nó.

Mã tương tự tồn tại ở đó để ngăn chặn việc gửi biểu mẫu hoạt động hoàn toàn (nó chỉ không làm gì cả) và vv.

Bộ lọc để chặn và xử lý các giá trị tùy biến nằm trong class-wp-customize-setting.php. Các preview()chức năng bổ sung thêm các bộ lọc cần thiết để xử lý các giá trị đến, các _preview_filter()chức năng là bộ lọc đó. Nó chỉ đơn giản là nhận get_option()hoặc get_theme_mod()gọi, thông báo khi chúng được coi là tùy chọn sửa đổi và trả về các giá trị được sửa đổi thay thế.


1

Bạn sẽ nhận thấy rằng khi bạn nhấp vào một liên kết trong cửa sổ xem trước tùy biến, yêu cầu được tạo là một POSTyêu cầu, thay vì bình thường GET. Tùy biến dường như ghi đè bất kỳ nhấp chuột liên kết nào và POSTthay vào đó, với dữ liệu biểu mẫu sau:

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

Trường tùy chỉnh là những gì chứa các tùy chọn bạn đã sửa đổi, vì vậy đó là nơi dữ liệu được truyền qua chủ đề của bạn. Sau đó, mã tùy biến sẽ chặn (thông qua bộ lọc, tôi không chắc chắn chính xác cái nào) tùy chọn chủ đề của bạn khi chúng được yêu cầu và thay thế chúng bằng các giá trị trong tham số tùy chỉnh .


2
Hãy xem tại đây: /wp-includes/class-wp-customize-manager.php...
brasofilo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.