É possível estender o WP Customize JS Methods?

9

Gostaria de saber se é possível estender os métodos do apiobjeto anônimo wp-admin/js/customize-control.js. Preciso sobrescrever um desses métodos com minha própria lógica personalizada, mas suspeito que não seja possível, pois está envolvido em uma expressão de função chamada imediatamente:

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

Tanto quanto posso ver, não consigo estender o protótipo do objeto de janela porque ele é executado anonimamente e não está disponível em window.wp.customize. Alguma idéia se isso é possível? Há até menção de substituir isso na documentação / descrição dos métodos .toggle (): https://github.com/WordPress/WordPress/blob/master/wp-admin/js/customize-controls.js#L110 , mas eu não tenho certeza se eles significam simplesmente bifurcar todo o arquivo JS, desenfileirar a versão do WP e enfileirar a sua, ou se eles significam ou algo diferente.

Observe que parece ser possível com, wp.customize.{method}.extend({ foo: // replace method foo here })mas isso se aplica apenas às classes / objetos públicos básicos, não àqueles emwp-admin/js/customize-control.js

Brian
fonte
3
Embora apiseja anônimo, é apenas um sinônimo para wp.customize(veja a linha 3), que é acessível globalmente. No entanto, parece que o Yet Another Object Model usado para controles chama a readyfunção initializepara que não seja possível (ou seja, sempre seja tarde demais) substituir os métodos - o que você está tentando estender?
Bonger
Em teoria, isso faz sentido - sugestão apreciada. No meu caso, senti que essa abordagem era bastante hacky e consegui encontrar outra solução adequada para o meu caso de uso. No entanto, uma resposta com código ativo ainda pode ser útil para alguém que não tem outra opção para seu caso de uso. O desempenho com o que eu estava planejando teria sido terrível de qualquer maneira.
Brian
11
Eu não sou o especialista em JS. Mas eu adicionei em um pequeno tema o script do personalizador para atualizar sempre minhas extensões. Eu trabalho com wp.customizee adiciono funções a esse objeto. veja aqui um exemplo de fonte - github.com/bueltge/Documentation/blob/master/js/…
bueltge 20/15

Respostas:

5

Vou melhorar meu pequeno comentário sobre sua pergunta. Mas novamente a dica; Eu não sou um especialista em JS. A fonte a seguir, dicas foi usada apenas para brincar com o Personalizador para diferentes verificações, exemplos, como minha caixa de areia .

wp.customize

A compreensão da interface do customizador de tema WP gira em torno da compreensão do objeto javascript wp.customize. O wp.customizeobjeto é importante e você deve defini-lo no início.

Exemplo ao vivo

O pequeno exemplo a seguir demonstra isso. Inicialmente, defino o var apicomo o objeto do personalizador. Depois disso, defino meus campos personalizados como apie aprimore isso com uma pequena fonte jQuery para atualizar o resultado para visualização ao vivo.

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

Configurações e controles

Os objetos de controle são armazenados wp.customize.controle os objetos de configuração são armazenados wp.customize. A classe de valor tem muitas funções, pode ajudá-lo.

  • instance (id) - obtém um objeto da coleção com o ID especificado.
  • has (id) - Retorne true, se a coleção contiver um objeto com o id especificado e false, caso contrário.
  • add (id, value) - adicione um objeto à coleção com um id e valor especificados.
  • remove (id) - Remova o objeto da coleção.
  • create (id) - Crie um novo objeto, usando o construtor padrão e adicione-o à coleção.
  • each (retorno de chamada, contexto) - itere sobre os elementos da coleção.

Configurações personalizadas

Com essas funções, podemos aprimorar nossas configurações personalizadas.

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

também utilizável para uma matriz

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

Pegue

Veja o resultado no console.

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

Conjunto

Você também pode alterar os valores de configuração via função set.

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

Obter com o controle, como objeto

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

Fonte útil

  • wp-admin / js / customize-controls.js
  • wp-includes / js / customize-preview.js
  • wp-includes / js / customize-base.js
bueltge
fonte