2013-10-03 21 views
5

Sto impostando un modo per me per mantenere il mio modo di lavoro requireJS preferito e integrarlo con Wordpress.Utilizzo di requireJS in Wordpress

Il grosso problema è come caricare quindi jquery. Wordpress carica jQuery tramite wp_enqueue_script che deve rimanere tale poiché alcuni plugin Wordpress che uso regolarmente necessitano di jquery per essere aggiunti in questo modo. Quindi non voglio caricare una seconda versione di jQuery nella mia configurazione requireJS. Così, dopo un po 'guardando intorno a questo è ciò che mi è venuta in mente:

templates/footer.php

<script> 
if (typeof jQuery === 'function') { 
    define('jquery', function() { return jQuery; }); 
} 

require(['/assets/js/sample-common.js'], function (common) { 
    require(['sample-bootstrapper']); 
}); 
</script> 

che vede se jQuery è già stato aggiunto alla pagina, se è stato poi lo imposta come valore del modulo.

La mia domanda è dovrei poi basta lasciare jquery di essere nel namespace globale, o seguire le seguenti istruzioni:

http://requirejs.org/docs/jquery.html#noconflictmap

Il problema di cui sopra è probabilmente ho bisogno di includere i plugin jQuery che aren Compatibile con AMD, vale la pena di renderli compatibili con AMD o un'altra soluzione a cui ho pensato è stata la rimozione della vera dalla dichiarazione noConflict che mantiene il 'jQuery' nello spazio dei nomi globale che consente ai plugin di funzionare.

Questa è meno una domanda e più di una chiamata per consigli sulle migliori pratiche. E qualsiasi sarebbe molto apprezzato!

Grazie!

+0

Penso che tu abbia ancora bisogno di inserire "jquery" nelle tue esigenze, oltre a definirlo no? – WraithKenny

risposta

0

WordPress accoda jQuery perché è uno script, si dovrebbe fare lo stesso per i propri script perché significa che WordPress può gestire con garbo le dipendenze per voi. Si noti inoltre che jQuery in bundle di WordPress è già caricato nella modalità noConflict() per evitare conflitti tra plugin.

SE si specifica jQuery come una delle dipendenze dello script, WordPress lo aggiungerà a qualsiasi pagina che aggiunge lo script che dipende da esso, ma solo se non è già stato caricato (non lo aggiungerà a seconda volta).

AGGIORNAMENTO: come da commento @brasofilo, la funzione get_stylesheet_directory() ricerca il figlio e quindi il genitore se non esiste alcuna corrispondenza nel figlio. Sicuro da usare get_stylesheet_directory() in entrambe le situazioni a tema padre e figlio.

riportati dal Codex WP e modificato: http://codex.wordpress.org/Function_Reference/wp_enqueue_script

/** 
* Proper way to enqueue scripts and styles 
*/ 
function theme_name_scripts() { 
    wp_enqueue_script('script-name', get_template_directory_uri() . '/assets/js/sample-common.js', array('jquery'), '1.0.0', true); 
} 

add_action('wp_enqueue_scripts', 'theme_name_scripts'); 

Vale la pena notare qui che se lo script è in una directory a tema bambino allora si dovrebbe scambiare get_template_directory_uri() e sostituirlo con get_stylesheet_directory_uri().

+1

'get_stylesheet_' cerca il figlio e se non esiste, cerca il genitore, cioè può essere usato tranquillamente in qualsiasi circostanza. – brasofilo

+0

Forse dovrebbe essere notato nella sezione relativa al parametro $ src nella pagina del codice che ho collegato ... grazie per averlo indicato @brasofilo :) –

+1

Grazie per la tua risposta, William. Capisco che probabilmente dovrei attenermi a wp_enqueue_script per tutto il mio caricamento di script ma preferirei attenermi a requireJS perché è così che eseguo il codice al di fuori di Wordpress e mentre costruisco i miei modelli prima di integrarli in WP non voglio refactoring codice per adattarsi. – FlimFlam

Problemi correlati