jQuery UI Datepicker nu funcționează
Vreau să adaug un datepicker pe o pagină personalizată dar nu funcționează. Versiunea WP este 3.2.1. Acestea sunt șirurile de inițializare pe care le-am folosit în codul 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');
Aceste enqueue-uri generează următorul cod:
<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' />
În corpul paginii, folosesc acest cod:
<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>
Datepicker-ul nu funcționează. Nu știu cum să depanez această problemă. Nu face nimic, ca și cum jQuery nici nu ar exista.
ACTUALIZARE:
Cu ajutorul vostru am reușit să depanez codul. Am plasat scriptul după div și l-am modificat în:
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('#datepicker').datepicker({
dateFormat : 'yy-mm-dd'
});
});
</script>
Acest cod îmi dă eroare când apelez metoda datepicker, eroarea spune:
Uncaught TypeError: Object [object Object] has no method 'datepicker'
Dacă scriu jQuery('#datepicker') în consola javascript, primesc:
[<input type="text" id="datepicker" name="day" class="text">]
Nu primesc alte erori în afară de aceasta, toate referințele la jQuery par să funcționeze bine.
ACTUALIZARE 2:
În sfârșit am reușit să-l fac să funcționeze! A trebuit să folosesc 'wp_print_scripts' în loc de 'init', și a trebuit să repoziționez codul de inițializare al unui alt plugin care era în conflict. Singura problemă rămasă sunt temele... dacă folosesc tema de bază din googlecode, funcționează. Dacă folosesc alte teme (încorporate în wp sau conectate cu wp_enqueque_style) tema nu va fi încărcată... dacă verific html-ul generat, nu există nicio urmă a liniei care ar trebui să încarce tema jQuery.

Deseori tastez greșit. Așa că, aș începe depanarea copiind și lipind linkurile către scripturile JS în browserul tău pentru a mă asigura că se încarcă.
Apoi, în Chrome, mergi la Meniul Cheie -> Instrumente -> Consolă JavaScript. Aici vei putea tasta/executa JavaScript direct. Aș începe prin a tasta jQuery
în consolă pentru a mă asigura că jQuery este încărcat. Apoi încearcă să folosești jQuery('#datepicker')
- dacă returnează paranteze goale []
, atunci selectorul tău eșuează. Dacă funcționează, încearcă să deschizi datepicker-ul - probabil vei vedea o eroare în consola JS.
Cum au sugerat și alții, cred că problema este că scriptul rulează înainte ca elementul să fie randat. Aș sugera să faci următoarele:
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('#datepicker').datepicker({
dateFormat : 'yy-mm-dd'
});
});
</script>
Asta va forța scriptul să ruleze după ce întreaga pagină s-a încărcat.
== EXEMPLU ==
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
}

Am urmat sfaturile tale și am făcut câțiva pași: acum am eroarea care îmi oprește codul să funcționeze. Spune: Uncaught TypeError: Object [object Object] has no method 'datepicker' pe linia jQuery('#datepicker').datepicker

Dacă acesta este cazul, atunci scriptul datepicker nu este inclus corect sau este scriptul greșit. Voi actualiza postarea mea cu cod care funcționează.

Asta mă înnebunește... încă am aceeași eroare! Am schimbat codul conform sugestiei tale, când scriu jQuery('#datepicker') primesc div-ul ca înainte, dar tot primesc aceeași eroare exactă! Am testat cu un fișier html gol, punând html-ul generat de wp_enqueues, și cu această pagină de test funcționează, deci este ceva în interiorul WP care strică datepicker(), dar nu am nicio idee cum să rezolv asta...

Apoi, ceea ce aș face este să setez tema la twentyeleven și să dezactivez toate celelalte plugin-uri. Activează-le pe rând până când găsești care dintre ele cauzează problema cu datepicker.

În sfârșit am reușit să o fac să funcționeze! A trebuit să folosesc 'wp_print_scripts' în loc de 'init' și să repoziționez niște cod de inițializare al unui alt plugin care intra în conflict. Singura problemă rămasă sunt temele... dacă folosesc tema de bază din googlecode, funcționează. Dacă folosesc alte teme (încorporate sau legate cu wp_enqueque_style), tema nu va fi încărcată.

Pentru cei care depanează un datepicker care "nu funcționează" - în cazul meu problema a fost din cauza CSS-ului de reset, mai exact a acestei reguli:
html, body { overflow: auto; }
Datepicker-ul meu funcționa corect, dar apărea în partea de sus a ecranului. :)

Am plasat scriptul după '<div>' dar nu s-a schimbat nimic. Am creat o pagină de test, HTML simplu, doar cu codul HTML generat din pagina wp, dar încă nu funcționează. Cum pot depana problema?

Includează și scriptul tău personalizat prin wp_enqueue_script()
și referențiază celelalte biblioteci, astfel nu vei avea probleme cu cronologia; scriptul tău personalizat va cere încărcarea bibliotecilor datepicker după ce toate celelalte scripturi sunt gata; funcționează corect și în versiunile viitoare ale WordPress.

@bueltge asta ar rezolva problema doar dacă Terix l-ar apela astfel: wp_enqueue_script( 'do-date', 'http://www.xxxxxxxx.it/wp-content/themes/greyzed/js/do_date.js' , array('jquery-ui-datepicker'), 1, true )
- ultimul 'true' fiind important pentru a pune scriptul în footer, adică după ce div
-ul a fost creat. Tot prefer să folosesc document.ready(), indiferent.
