jQuery UI Datepicker non funzionante
Voglio aggiungere un datepicker su una pagina personalizzata ma non funziona. La versione di WP è 3.2.1. Queste sono le stringhe di inizializzazione che ho usato nel codice WP:
wp_enqueue_script('jquery');
wp_enqueue_script('jquery-ui-core');
wp_enqueue_script('jquery-ui-datepicker', get_bloginfo('template_url') . '/js/jquery-ui-datepicker.min.js', array('jquery','jquery-ui-core'));
wp_enqueue_style('jquery.ui.theme', get_bloginfo('template_url') . '/js/smoothness/jquery-ui-1.8.16.custom.css');
Questi enqueue generano questo codice:
<script type='text/javascript' src='http://www.xxxxxxxx.it/wp-includes/js/jquery/jquery.js?ver=1.6.1'></script>
<script type='text/javascript' src='http://www.xxxxxxxx.it/wp-includes/js/jquery/ui.core.js?ver=1.8.12'></script>
<script type='text/javascript' src='http://www.xxxxxxxx.it/wp-content/themes/greyzed/js/jquery-ui-datepicker.min.js?ver=3.2.1'></script>
<link rel='stylesheet' id='jquery.ui.theme-css' href='http://www.xxxxxxxx.it/wp-content/themes/greyzed/js/smoothness/jquery-ui-1.8.16.custom.css?ver=3.2.1' type='text/css' media='all' />
Nel body della pagina, uso questo codice:
<script type="text/javascript">
jQuery('#datepicker').datepicker({
dateFormat : 'yy-mm-dd'
});
</script>
<div class="row"><label for="day">Data</label><input type="text" id="datepicker" name="day" class="text" /></div>
Il datepicker non funziona. Non so come debuggare questo problema. Non fa nulla, come se jQuery non fosse presente.
AGGIORNAMENTO:
Con il vostro aiuto sono riuscito a debuggare il codice. Ho posizionato lo script dopo il div e l'ho modificato in:
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('#datepicker').datepicker({
dateFormat : 'yy-mm-dd'
});
});
</script>
Questo codice mi dà un errore quando chiama il metodo datepicker, l'errore indica:
Uncaught TypeError: Object [object Object] has no method 'datepicker'
Se digito jQuery('#datepicker') sulla console javascript, ottengo questo:
[<input type="text" id="datepicker" name="day" class="text">]
Non ottengo altri errori tranne quello, tutti i riferimenti a jQuery sembrano funzionare correttamente.
AGGIORNAMENTO 2:
Finalmente l'ho fatto funzionare! Ho dovuto usare 'wp_print_scripts' invece di 'init', e ho dovuto riposizionare del codice di inizializzazione di un altro plugin che era in conflitto. L'unico problema rimanente sono i temi... se uso il tema base dentro googlecode, funziona. Se uso altri temi (incorporati in wp o collegati con wp_enqueque_style) il tema non viene caricato.... se controllo l'html generato, non c'è traccia della riga che dovrebbe caricare il tema jQuery.

Spesso digito le cose in modo sbagliato. Quindi, inizierei a debuggarle copiando e incollando i link agli script JS nel tuo browser per assicurarti che si carichino.
Poi in Chrome vai nel Menu Chiave inglese -> Strumenti -> Console JavaScript. Qui potrai digitare/eseguire direttamente il tuo JavaScript. Comincerei digitando jQuery
nella console per assicurarmi che jQuery sia effettivamente caricato. Poi prova a fare jQuery('#datepicker')
se restituisce parentesi vuote []
allora il tuo selettore non funziona. Se funziona, prova ad aprire il datepicker - probabilmente vedrai un errore nella console JS.
Come hanno suggerito altri, penso che il problema sia che lo script viene eseguito prima che il sia effettivamente renderizzato. Suggerirei di fare quanto segue:
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('#datepicker').datepicker({
dateFormat : 'yy-mm-dd'
});
});
</script>
Questo costringerà lo script a essere eseguito dopo che l'intera pagina è stata caricata.
== ESEMPIO ==
add_action( 'init', 'wp29r01_date_picker' );
function wp29r01_date_picker() {
wp_enqueue_script( 'jquery' );
wp_enqueue_script( 'jquery-ui-core' );
wp_enqueue_script( 'jquery-datepicker', 'http://jquery-ui.googlecode.com/svn/trunk/ui/jquery.ui.datepicker.js', array('jquery', 'jquery-ui-core' ) );
}
add_action( 'wp_footer', 'wp29r01_print_scripts');
function wp29r01_print_scripts() {
?>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('#datepicker').datepicker();
})
</script>
<?php
}

Ho seguito i tuoi consigli e ho fatto alcuni passi: ora ho l'errore che blocca il mio codice. Dice: Uncaught TypeError: Object [object Object] has no method 'datepicker' sulla riga jQuery('#datepicker').datepicker

Se è così, allora lo script datepicker non viene incluso correttamente, oppure è lo script sbagliato. Aggiornerò il mio post con il codice funzionante.

Questo mi sta facendo impazzire... ho ancora lo stesso errore! Ho modificato il codice secondo i tuoi suggerimenti, quando scrivo jQuery('#datepicker') ottengo il div come prima, ma continuo a ricevere lo stesso identico errore! Ho testato con un file html vuoto, inserendo l'output html dei wp_enqueques, e con questa pagina di test funziona, quindi c'è qualcosa all'interno di wp che sta mandando in tilt datepicker(), ma non ho idea di come risolvere...

Quello che farei è impostare il tuo tema su twentyeleven e disattivare tutti gli altri plugin. Attivali uno per uno fino a trovare quale sta causando l'interruzione di datepicker.

Finalmente ho risolto! Ho dovuto inserire 'wp_print_scripts' invece di 'init', e ho dovuto riposizionare del codice di inizializzazione di un altro plugin che era in conflitto. L'unico problema rimasto sono i temi... se uso il tema base all'interno di googlecode, funziona. Se uso altri temi (incorporati o collegati con wp_enqueque_style) il tema non viene caricato.

Per chi sta eseguendo il debug di un datepicker che "non funziona" - nel mio caso era un problema del mio CSS di reset, in particolare di questo:
html, body { overflow: auto; }
Il mio datepicker funzionava correttamente, ma continuava ad apparire in alto rispetto alla posizione prevista. :)

Ho inserito lo script dopo il '<div>' ma non è cambiato nulla. Ho creato una pagina di test, html semplice, con solo l'html generato dalla pagina wp, ancora non funziona, come posso eseguire il debug?

Includi il tuo script personalizzato anche tramite wp_enqueue_script()
e fai riferimento alle altre librerie, così non avrai problemi con la timeline; il tuo script personalizzato per richiedere le librerie del datepicker verrà caricato dopo che tutti gli altri script sono pronti; funziona bene e anche nelle versioni future di WP.

@bueltge ciò risolverebbe il problema solo se Terix lo chiamasse così: wp_enqueue_script( 'do-date', 'http://www.xxxxxxxx.it/wp-content/themes/greyzed/js/do_date.js' , array('jquery-ui-datepicker'), 1, true )
- l'ultimo 'true' è importante perché posiziona lo script nel footer, cioè dopo che il div
è stato creato. Personalmente preferisco comunque usare document.ready().
