Có thể mở rộng WP Tùy chỉnh các phương thức JS không?


9

Tôi tự hỏi liệu có thể mở rộng các phương thức của apiđối tượng ẩn danh trong đó không wp-admin/js/customize-control.js. Tôi cần ghi đè một trong các phương thức này bằng logic tùy chỉnh của riêng mình nhưng tôi nghi ngờ điều đó là không thể vì nó được bao bọc trong một biểu thức hàm được gọi ngay lập tức:

/* globals _wpCustomizeHeader, _wpMediaViewsL10n */
(function( exports, $ ){
// code
})( wp, jQuery );

Theo như tôi có thể thấy, tôi không thể mở rộng nguyên mẫu từ đối tượng cửa sổ vì nó được thực thi ẩn danh và không có sẵn từ đó window.wp.customize. Bất cứ ý tưởng nếu một điều như vậy là có thể? Thậm chí còn có đề cập đến việc ghi đè điều này trong tài liệu / mô tả phương thức .toggle (): https://github.com/WordPress/WordPress/blob/master/wp-admin/js/customize-controls.js#L110 , nhưng tôi 'Tôi không chắc liệu chúng có nghĩa là chỉ đơn giản là giả mạo toàn bộ tệp JS, loại bỏ phiên bản WP và mê hoặc của bạn hoặc nếu chúng có ý nghĩa hoặc một cái gì đó khác.

Lưu ý rằng có vẻ như điều đó là có thể với wp.customize.{method}.extend({ foo: // replace method foo here })nhưng điều đó chỉ áp dụng cho các lớp / đối tượng cơ sở công cộng, không phải cho các đối tượng trongwp-admin/js/customize-control.js


3
Mặc dù apilà ẩn danh nhưng nó chỉ là một từ đồng nghĩa với wp.customize(xem dòng 3) có thể truy cập trên toàn cầu. Tuy nhiên, có vẻ như Mô hình đối tượng Yet Another được sử dụng cho các điều khiển gọi readyhàm trong initializeđể người ta không thể có cơ hội (tức là luôn quá muộn) để ghi đè lên các phương thức - bạn đang cố gắng mở rộng điều gì?
bonger

Về lý thuyết, điều đó có ý nghĩa - đề nghị đánh giá cao. Trong trường hợp của tôi, tôi cảm thấy rằng cách tiếp cận này khá khó khăn và đã tìm ra một giải pháp phù hợp khác cho trường hợp sử dụng của tôi. Tuy nhiên, một câu trả lời với mã làm việc vẫn có thể được sử dụng cho người không có lựa chọn nào khác cho trường hợp sử dụng của họ. Hiệu suất với những gì tôi đã lên kế hoạch dù sao cũng sẽ rất tệ.
Brian

1
Tôi không phải là chuyên gia về JS. Nhưng tôi có một phần bổ sung trong một chủ đề nhỏ, tập lệnh tùy biến để luôn làm mới phần mở rộng của mình. Tôi làm việc với wp.customizevà thêm các chức năng cho đối tượng này. xem ở đây để biết ví dụ về nguồn - github.com/bueltge/Documentation/blob/master/js/
mẹo

Câu trả lời:


5

Tôi sẽ tăng cường nhận xét nhỏ của tôi về câu hỏi của bạn. Nhưng một lần nữa gợi ý; Tôi không phải là chuyên gia về JS. Nguồn theo dõi, gợi ý chỉ được sử dụng khi chơi với Customizer cho các kiểm tra, ví dụ khác nhau, như hộp cát của tôi .

wp.customize

Hiểu giao diện tùy biến chủ đề WP xoay quanh việc hiểu đối tượng javascript wp.customize. Đối wp.customizetượng là quan trọng và bạn nên đặt nó khi bắt đầu.

Ví dụ trực tiếp

Ví dụ nhỏ sau đây chứng minh điều này. Đầu tiên tôi đặt var apicho đối tượng của trình tùy biến. Sau này, tôi đặt các trường tùy chỉnh của mình thành apivà cải thiện điều này bằng nguồn jQuery nhỏ để làm mới kết quả để xem trước trực tiếp.

( function( $ ) {
    var api = wp.customize;

    // Site title and description.
    api( 'blogname', function( value ) {
        value.bind( function( to ) {
            $( '#header h1 a, #footer a.site-name' ).html( to );
        } );
    } );

    api( 'blogdescription', function( value ) {
        value.bind( function( to ) {
            $( '#header p.site-description' ).html( to );
        } );
    } );

} )( jQuery );

Cài đặt và điều khiển

Đối tượng điều khiển được lưu trữ trong wp.customize.controlvà thiết lập đối tượng được lưu trữ trong wp.customize. Lớp giá trị có rất nhiều hàm, có thể giúp bạn.

  • dụ (id) - Nhận một đối tượng từ bộ sưu tập với id được chỉ định.
  • has (id) - Trả về true, nếu bộ sưu tập chứa một đối tượng có id được chỉ định và nó sai khác.
  • add (id, value) - Thêm một đối tượng vào bộ sưu tập với id và giá trị được chỉ định.
  • remove (id) - Xóa đối tượng khỏi bộ sưu tập.
  • tạo (id) - Tạo một đối tượng mới, sử dụng hàm tạo mặc định và thêm nó vào bộ sưu tập.
  • mỗi (gọi lại, bối cảnh) - Lặp lại các yếu tố trong bộ sưu tập.

Cài đặt tùy chỉnh

Với chức năng này, chúng tôi có thể tăng cường cài đặt tùy chỉnh của chúng tôi.

var api = wp.customize,
    mysetting = api.instance( 'my_custom_setting' );

cũng có thể sử dụng cho một mảng

var api = wp.customize,
    mysetting = api.instance( 'my_custom_settings[my_custom_setting_field]' );

Được

Xem kết quả trong bàn điều khiển.

console.log( api.instance( 'my_custom_settings[my_custom_setting_field]' ).get() );

Bộ

Bạn cũng có thể thay đổi các giá trị cài đặt thông qua chức năng set.

api.instance( 'my_custom_settings[my_custom_setting_field]' ).set( 'my new value' ) );

Nhận với điều khiển, như là đối tượng

console.log( api.control.instance( 'my_custom_setting_field' ) );

Nguồn hữu ích

  • wp-admin / js / custom-controls.js
  • wp-gồm / js / custom-preview.js
  • wp-gồm / js / custom-base.js
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.