È possibile estendere WP personalizzare i metodi JS?


9

Mi chiedo se è possibile estendere i metodi apidell'oggetto anonimo wp-admin/js/customize-control.js. Ho bisogno di sovrascrivere uno di questi metodi con la mia logica personalizzata, ma sospetto che non sia possibile poiché è racchiuso in un'espressione di funzione immediatamente invocata:

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

Per quanto posso vedere, non sono in grado di estendere il prototipo dall'oggetto finestra perché è eseguito in modo anonimo e non disponibile da window.wp.customize. Qualche idea se una cosa del genere sia possibile? Si parla anche di sovrascriverlo nella documentazione / descrizione dei metodi .toggle (): https://github.com/WordPress/WordPress/blob/master/wp-admin/js/customize-controls.js#L110 , ma I non sono sicuro che intendano semplicemente biforcando l'intero file JS, accodando la versione di WP e accodando la tua o se significano o qualcosa di diverso.

Si noti che sembra che dovrebbe essere possibile con wp.customize.{method}.extend({ foo: // replace method foo here })ma che si applica solo alle classi / oggetti di base pubblica, non a quelli inwp-admin/js/customize-control.js


3
Sebbene apisia anonimo è solo un sinonimo di wp.customize(vedi riga 3) che è accessibile a livello globale. Tuttavia sembra che l'ennesimo modello a oggetti usato per i controlli richiami la readyfunzione in initializemodo da non avere la possibilità (cioè essere sempre troppo tardi) di sovrascrivere i metodi - cosa stai cercando di estendere?
bonger

In teoria, questo ha senso: il suggerimento è apprezzato. Nel mio caso, ho sentito che questo approccio era piuttosto confuso e sono riuscito a trovare un'altra soluzione adatta per il mio caso d'uso. Tuttavia, una risposta con un codice funzionante potrebbe comunque essere utile a qualcuno che non ha altre opzioni per il proprio caso d'uso. Le prestazioni con quello che stavo pianificando sarebbero state comunque orribili.
Brian,

1
Non sono un esperto di JS. Ma ho aggiunto in un piccolo tema lo script di personalizzazione per aggiornare sempre le mie estensioni. Lavoro con wp.customizee aggiungo funzioni a questo oggetto. vedere qui per un esempio di fonte - github.com/bueltge/Documentation/blob/master/js/…
bueltge

Risposte:


5

Migliorerò il mio piccolo commento sulla tua domanda. Ma di nuovo il suggerimento; Non sono un esperto di JS. La seguente fonte, i suggerimenti sono stati usati solo giocando con il Customizer per diversi controlli, esempi, come il mio sandbox .

wp.customize

La comprensione dell'interfaccia di personalizzazione del tema WP è incentrata sulla comprensione dell'oggetto javascript wp.customize. L' wp.customizeoggetto è importante e dovresti impostarlo all'inizio.

Esempio live

Il seguente piccolo esempio lo dimostra. Inizialmente ho impostato var apisull'oggetto del personalizzatore. Dopodiché ho impostato i miei campi personalizzati su apie lo perfeziono con una piccola fonte jQuery per aggiornare il risultato per l'anteprima dal 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 );

Impostazioni e controlli

Gli oggetti di controllo sono memorizzati wp.customize.controle gli oggetti di impostazione sono memorizzati in wp.customize. La classe di valore ha molte funzioni, lì può aiutarti.

  • istanza (id): ottiene un oggetto dalla raccolta con l'id specificato.
  • has (id) - Restituisce true se la raccolta contiene un oggetto con l'id specificato e in caso contrario false.
  • add (id, valore): consente di aggiungere un oggetto alla raccolta con un ID e un valore specificati.
  • remove (id): rimuove l'oggetto dalla raccolta.
  • create (id) - Crea un nuovo oggetto, usando il costruttore predefinito e aggiungilo alla collezione.
  • each (callback, context) - Iterate sugli elementi all'interno della raccolta.

Impostazioni personalizzate

Con queste funzioni possiamo migliorare le nostre impostazioni personalizzate.

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

utilizzabile anche per un array

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

Ottenere

Vedi il risultato nella console.

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

Impostato

È inoltre possibile modificare i valori di impostazione tramite la funzione set.

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

Ottieni con il controllo, come oggetto

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

Fonte utile

  • wp-admin / js / customize-controls.js
  • wp-includes / js / customize-preview.js
  • wp-includes / js / customize-base.js
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.