Можно ли расширить 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. Следующие источники, подсказки, использовались только при игре с настройщиком для различных проверок, примеров, таких как моя песочница .

wp.customize

Понимание интерфейса настройщика тем WP основано на понимании объекта javascript wp.customize. 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. В классе значений есть много функций, в этом вам могут помочь.

  • instance (id) - получить объект из коллекции с указанным идентификатором.
  • has (id) - Возвращает true, если коллекция содержит объект с указанным идентификатором и false в противном случае.
  • add (id, value) - добавить объект в коллекцию с указанным id и значением.
  • удалить (id) - удалить объект из коллекции.
  • create (id) - создайте новый объект, используя конструктор по умолчанию, и добавьте его в коллекцию.
  • each (callback, context) - перебирает элементы в коллекции.

Пользовательские настройки

С помощью этих функций мы можем улучшить наши пользовательские настройки.

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-администратора / JS / подгоняет-controls.js
  • WP-включает / JS / подгоняет-preview.js
  • WP-включает / JS / подгоняет-base.js
bueltge
источник