Transmite variabile PHP către JavaScript
Există vreo posibilitate de a transmite unele variabile PHP în JavaScript pentru a le putea folosi mai târziu?
Doar în single.php
.
Am auzit despre wp_enqueue_scripts
dar cu acesta este necesar să declari o cale către un fișier JS, însă nu am nevoie de unul.

Metodă recomandată
Aruncați o privire la wp_localize_script
, care este conceput exact pentru acest scop.
Dar necesită utilizarea anterioară a wp_enqueue_scripts
, așadar va trebui să mutați JS-ul într-un fișier separat.
Cu siguranță, acele câteva minute de efort vor merita.
function wpse_96370_scripts()
{
if ( is_single() ) {
wp_register_script(
'your_script_handle',
get_template_directory_uri() . '/js/your-script.js',
array( /* dependințe */ ),
1.0,
true
);
wp_enqueue_script( 'your-script-handle' );
$script_params = array(
/* exemple */
'post' => 99,
'users' => array( 1, 20, 2049 )
);
wp_localize_script( 'your-script-handle', 'scriptParams', $script_params );
}
}
add_action( 'wp_enqueue_scripts', 'wpse_96370_scripts' );
În JS veți putea folosi parametrii transmiși astfel:
var posts = scriptParams.post,
secondUser = scriptParams.users[1]; /* indexarea începe de la 0 */
// iterare prin utilizatori
for ( var i = 0; i < scriptParams.users.length; i++ ) {
alert( scriptParams.users[i] );
}
[Edit] Situația ta
Conform comentariului tău
Am creat o nouă tabelă în baza de date cu niște
response.id
-uri din api-ul facebook. Aceasta este tabela: action_id, user_id, post_id, fb_id unde fb_id este response.id dintr-o acțiune facebook. Apoi în single.php am un buton care la apăsare trebuie să șteargă acțiunea fb cu api-ul:FB.api('/'+fb.response, 'delete');
undefb.response
ar trebui să fiefb_id
din tabel.
Puneți următoarele în directorul /js/
al temei, creați-l dacă nu există.
Să numim fișierul fb-response.js
:
jQuery( '#button_id' ).click( function() {
FB.api( '/' + fbParams.id, 'delete' );
});
Apoi înregistrați, adăugați în coadă și localizați așa cum se vede mai sus. Presupunând că aveți ID-ul pe care doriți să-l transmiteți în, să zicem, $fb_id
:
wp_register_script(
'fb-response',
get_template_directory_uri() . '/js/fb-response.js',
array( 'jquery' ),
1.0,
true
);
wp_enqueue_script( 'fb-response' );
wp_localize_script( 'fb-response', 'fbParams', array( 'id' => $fb_id ) );
Notă: Evident, cele de mai sus presupun că vorbim despre o temă. Dacă e vorba de un "plugin", ajustați locațiile în consecință.

Sunt puțin începător în acest domeniu, așa că încerc să implementez acest lucru în WordPress-ul meu: http://papermashup.com/jquery-iphone-style-ajax-switch/. După cum puteți vedea, există un fișier js și câteva rânduri de cod js de introdus în fișierul de utilizare. Sau pot pune acele câteva rânduri de cod într-un alt fișier?

Deci pentru orice acțiune mică în javascript ar trebui să creez un fișier? Dacă ești disponibil, poți să mă adaugi pe Skype: sebyku17?

Asta depinde de ce vrei să faci, unde vrei să faci asta și așa mai departe. În general: Nu, nu trebuie să folosești un fișier JS extern. Dar dacă alegi să faci asta, poți pune orice într-un singur fișier. Nu este nevoie de mai multe fișiere dacă ai mai multe funcții, dacă la asta te refereai. Totuși, deja ai acceptat acest răspuns (în opinia mea destul de complex și în cazul tău puțin exagerat) - fără să-l înțelegi pe deplin, după cum înțeleg. Fără supărare, @Johannes. ;)

Ei bine, până la urmă se rezumă la preferințe personale, presupun. Dar un lucru e sigur: cu cât baza ta de cod devine mai mare, cu atât va fi mai greu de citit mai târziu, și cu atât mai important este să o ții curată. Eu, unul, nu-mi place să am cod de server și de client în același fișier - cu excepții, evident. Un simplu onclick
pe o singură linie poate fi lăsat inline, dar renunți și la puterea wp_localize_script
.

Aceasta este pagina mea: http://funny-videoro.com/the-dark-knight-rises-trailer-oficial/, după ce apeși pe player și te autentifici, în partea de jos a playerului este un buton, când apeși pentru a-l opri ar trebui să șteargă postarea de pe Facebook. Voi încerca să creez un fișier js pentru toate funcțiile. Sper să funcționeze.

Nu luați în nume de rău, @tf. Până acum ar putea fi la limita exagerării, dar pe de o parte codul lui ar putea crește și pe de altă parte, întrebarea inițială vorbea de "variabile", la plural. Răspunsul tău este la fel de valid, așa că +1 de la mine.

Îmi cer scuze pentru neînțelegeri, vreau să fac codul curat, php în fișier php și js în fișier js așa cum a spus Johannes Pille.

Tema mea are 2 fișiere: custom-functions.php și theme_functions.php, în custom am ceva de genul:
function my_deregister_scripts() {
wp_deregister_script( 'jquery' );
wp_enqueue_script('jquery'...
wp_enqueue_script('jquery-ui'...
wp_enqueue_script('jquery-superfish' ...
wp_enqueue_script('jquery-slider'
Și în funcțiile temei: `function mytheme_enqueue_scripts(){ wp_enqueue_script( 'jquery' );
} add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_scripts');` Unde ar trebui să înregistrez variabilele mele php?

Unde, @Sebastian, depinde din nou de tine. Partea importantă este conectarea încărcării cu acțiunea wp_enqueue_scripts
- am actualizat exemplul generic de mai sus pentru a include și asta.

Am făcut modificările, funcționează dar sunt sigur că codul nu este optim, cred că e o mizerie acolo, este împotriva regulilor acestui site să cer cuiva în privat să se uite peste codul meu? Nu e mare lucru și dacă vrei plătesc.

Cu siguranță poți angaja un profesionist, dar rețeaua stackexchange nu este menită să fie o platformă de freelance. Și dacă ar fi, eu personal nu aș avea timp de lucru cu clienți oricum. Scuze. De asemenea, reține că comentariile nu sunt menite pentru discuții extinse - această lungime probabil a generat deja un flag de la un moderator - mă bucur că te-am putut ajuta, felicitări că ai reușit să-ți faci codul să funcționeze.

wp_localize_script este o funcție foarte puțin utilizată și puternică pentru transmiterea valorilor PHP către un fișier Javascript. Este surprinzător că nu mulți oameni știu de această funcționalitate puternică din Wordpress.

Simt la fel, @DigitalSea - este una dintre caracteristicile pentru care iubesc WP cel mai mult.

https://developer.wordpress.org/reference/functions/wp_add_inline_script/ ar trebui să fie opțiunea preferată în zilele noastre
EDIT: Din documentația de mai sus:
function mytheme_enqueue_typekit() {
wp_enqueue_script( 'mytheme-typekit', 'https://use.typekit.net/.js', array(), '1.0' );
wp_add_inline_script( 'mytheme-typekit', 'try{Typekit.load({ async: true });}catch(e){}' );
}
add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_typekit' );
Deci mai întâi încarci scriptul cu wp_enqueue_script, și apoi transmiți variabilele
Totuși acest cod generează pur și simplu următoarele
<script type="text/javascript" src="https://use.typekit.net/.js?ver=1.0"></script>
<script type="text/javascript"> try{Typekit.load({ async: true });}catch(e){} </script>
În cazul meu, expun direct datele de care am nevoie scriind codul JavaScript (în template) și folosind o variabilă globală JS cu un nume specific (nu am găsit o metodă mai bună) (folosind Timber, PHP pur ar fi echivalent)
<script>
my_global_variable.data1 = {{ custom_timber_function()|json_encode }}
</script>
$twig->addFunction(new Timber\Twig_Function('custom_timber_function', function () {
return [
'theme' => get_stylesheet_directory_uri(),
];
}));

Nu, aceasta este pagina pe care lucrez: http://funny-videoro.com/the-dark-knight-rises-trailer-oficial/ . Dacă dorești, te poți autentifica pe website. Apoi vei vedea un buton în stil jQuery iOS. Când glisez pentru a-l dezactiva, trebuie să șterg prin API-ul FB un post. ID-ul postului se află în baza de date.

Păi, asta este în esență ceea ce am scris în răspunsul meu. Preluați ID-ul din baza de date și stocați-l într-o variabilă. Apoi afișați-l direct în apelul funcției JavaScript pe o singură linie. <input ... />
și funcția sa au fost doar în scop demonstrativ. Din câte am înțeles, tot ce ai nevoie este deja spus. Dacă nu, te rog să încerci să explici mai multe, dar în întrebarea ta, nu în comentarii.
