Чи можливо розширити WP Налаштувати методи JS?


9

Мені цікаво, чи можливо розширити методи анонімного apiоб’єкта в wp-admin/js/customize-control.js. Мені потрібно перезаписати один із цих методів власною власною логікою, але я підозрюю, що це неможливо, оскільки він загорнутий у вираз функції, що негайно викликається:

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

Наскільки я бачу, я не в змозі поширити прототип від об’єкта вікна, тому що він виконується анонімно та недоступний з window.wp.customize. Будь-яка ідея, чи таке можливо? У документації / описі методів .toggle () згадується навіть про перекриття цього питання: https://github.com/WordPress/WordPress/blob/master/wp-admin/js/customize-controls.js#L110 , але я Я не впевнений, якщо вони мають на увазі, просто розпакувавши весь файл JS, випустивши з нього WP-версію та запустивши власну, або якщо вони означають чи щось інше.

Зауважте, що, здається, це має бути можливо, wp.customize.{method}.extend({ foo: // replace method foo here })але це стосується лише загальнодоступних базових класів / об'єктів, а не тих, в яких єwp-admin/js/customize-control.js


3
Хоча apiанонімний це просто синонім wp.customize(див рядок 3) , яка доступна по всьому світу. Однак це виглядає так , як ніби Ще один об'єктна модель використовується для управління викликає readyфункцію initializeтаким чином один не може отримати шанс (тобто завжди бути занадто пізно) , щоб перезаписати методи - то , що ви намагаєтеся розширити?
Бонгер

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

1
Я не експерт JS. Але у мене є додати невелику тему сценарій настроювач для поновлення завжди мої розширень. Я працюю з wp.customizeі додати функції до цього об'єкта. дивіться тут для прикладу джерела - github.com/bueltge/Documentation/blob/master/js/…
bueltge

Відповіді:


5

Я підсилю свій невеликий коментар до вашого питання. Але знову натяк; Я не експерт JS. Наступне джерело, підказки використовувалося лише для гри з Customizer для різних перевірок, прикладів, таких як моя пісочниця .

wp.настроювати

Розуміння інтерфейсу налаштування інтерфейсу WP орієнтується на розуміння wp.customize об’єкта javascript. wp.customizeОб'єкт важливий , і ви повинні встановити його на старті.

Живий приклад

Наступний невеликий приклад демонструє це. Спочатку я встановив var apiоб’єкту налаштування. Після цього я встановив свої власні поля на apiта покращити це невеликим джерелом jQuery, щоб оновити результат для попереднього перегляду.

( 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 );

Налаштування та елементи керування

Об'єкти управління зберігаються в, wp.customize.controlа об'єкти настройки зберігаються в wp.customize. Клас цін має багато функцій, вони можуть вам допомогти.

  • Примірник (ідентифікатор) - отримати об'єкт з колекції із зазначеним ідентифікатором.
  • має (ідентифікатор) - повертає істину, якщо колекція містить об'єкт із зазначеним ідентифікатором і брехня в іншому випадку.
  • add (id, value) - додавання об'єкта до колекції із заданим ідентифікатором та значенням.
  • delete (id) - видаліть об'єкт із колекції.
  • create (id) - Створіть новий об’єкт, використовуючи конструктор за замовчуванням, і додайте його до колекції.
  • кожен (зворотний виклик, контекст) - Ітерація за елементами в колекції.

Спеціальні налаштування

За допомогою цієї функції ми можемо поліпшити наші власні настройки.

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

також можна використовувати для масиву

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

Отримайте

Дивіться результат на консолі.

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

Встановити

Ви також можете змінити значення налаштувань за допомогою функції set.

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

Отримайте управління, як об’єкт

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

Корисне джерело

  • wp-admin / js / customize-controls.js
  • wp-include / js / customize-preview.js
  • wp-include / js / customize-base.js
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.