Przekaż zmienną PHP do javascript


13

Czy jest jakaś możliwość przekazania niektórych zmiennych PHP w javascript, aby móc ich później użyć?

Tylko w single.php.
Słyszałem o, wp_enqueue_scriptsale z tym trzeba zadeklarować ścieżkę do pliku JS, ale nie potrzebuję go.


Do czego meandrujesz później i gdzie chcesz używać zmiennych (w odniesieniu do tego, gdzie znajdują się zmienne PHP)? Możesz oczywiście wykonać echo / wydrukować kod JavaScript przez PHP, a tym samym wstawić wartości zmiennych PHP. Ale chyba nie tego chcesz ...
wt

Utworzyłem nową tabelę db z pewnymi response.id`s z facebook api. Oto tabela: action_id, user_id, post_id, fb_id, gdzie fb_id to response.id z akcji na Facebooku. Następnie w single.php mam przycisk, w którym po naciśnięciu muszę usunąć akcję fb za pomocą api: FB.api ('/' + fb.response, 'delete'); gdzie fb.response powinno być fb_id z tabeli.
Sebastian Corneliu Vîrlan

Odpowiedzi:


18

Metoda najlepszych praktyk

Spójrz na to wp_localize_script, co ma dokładnie to zrobić.

Ale wymaga to wcześniejszego użyciawp_enqueue_scripts , dlatego trzeba przenieść JS do osobnego pliku.
Na pewno będzie to warte kilku minut wysiłku.

function wpse_96370_scripts()
{
    if ( is_single() ) {

        wp_register_script(
           'your_script_handle',
           get_template_directory_uri() . '/js/your-script.js',
           array( /* dependencies*/ ),
           1.0,
           true
       );

       wp_enqueue_script( 'your-script-handle' );

       $script_params = array(
           /* examples */
           'post' => 99,
           'users' => array( 1, 20, 2049 )
       );

       wp_localize_script( 'your-script-handle', 'scriptParams', $script_params );

    }
}
add_action( 'wp_enqueue_scripts', 'wpse_96370_scripts' );

W JS będziesz mógł wtedy wykorzystać przekazane parametry w następujący sposób:

var posts = scriptParams.post,
    secondUser = scriptParams.users[1]; /* index starts at 0 */

// iterate over users
for ( var i = 0; i < scriptParams.users.length; i++ ) {
    alert( scriptParams.users[i] );
}

[Edytuj] Twoja sytuacja

Jak na twój komentarz

Stworzyłem nową tabelę db z niektórymi response.ids z facebook api. Oto tabela: action_id, user_id, post_id, fb_id, gdzie fb_id to response.id z akcji na Facebooku. Następnie w single.php mam przycisk, w którym po naciśnięciu muszę usunąć akcję fb za pomocą interfejsu API: FB.api('/'+fb.response, 'delete');gdzie fb.responsepowinna być fb_idz tabeli.

Umieść następujący /js/folder swojego motywu , utwórz go, jeśli nie istnieje.
Nazwijmy plik fb-response.js:

jQuery( '#button_id' ).click( function() {
    FB.api( '/' + fbParams.id, 'delete' );
});

Następnie zarejestruj się, umieść w kolejce i zlokalizuj, jak pokazano powyżej. Zakładając, że masz identyfikator, który chcesz przekazać, powiedzmy $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 ) );

NB Oczywiście powyższe zakłada, że ​​jest to temat. Jeśli mówimy o „wtyczce”, odpowiednio zmień lokalizacje.


Jestem trochę początkującym w tym, więc staram się to zaimplementować w moim wordpress: papermashup.com/jquery-iphone-style-ajax-switch . Jak widać, istnieje plik js i kilka wierszy kodu js do umieszczenia w pliku użytkowania. Czy mogę umieścić kilka wierszy kodu w innym pliku?
Sebastian Corneliu Vîrlan

Więc w przypadku jakiejkolwiek małej czynności w javascript powinienem utworzyć plik? Jeśli jesteś dostępny, czy możesz dodać na skype: sebyku17?
Sebastian Corneliu Vîrlan

To zależy od tego, co chcesz zrobić, gdzie chcesz to zrobić i tak dalej. Ogólnie: Nie, nie musisz używać zewnętrznego pliku JS. Ale jeśli chcesz, możesz umieścić, co chcesz, w jednym pliku . Nie ma potrzeby używania wielu plików, jeśli masz wiele funkcji, jeśli o to pytasz. Jednak już zaakceptowałeś (IMHO dość złożoną iw twoim przypadku nieco przesadzoną ) odpowiedź - bez pełnego zrozumienia, tak jak ja to rozumiem. Bez obrazy, @Johannes. ;)
tfrommen 18.04.13

1
Nie podjęto, @tf. Jak dotąd może to być przesada graniczna, ale dla jednego jego kod może się powiększać, a dla drugiego początkowe pytanie mówiło o „zmiennych” w liczbie mnogiej. Twoja odpowiedź jest jednakowo ważna, więc daj +1 ode mnie.
Johannes Pille,

2
wp_localize_script to bardzo niewykorzystana i potężna funkcja do przekazywania wartości PHP do pliku JavaScript. To zaskakujące, że niewiele osób tak naprawdę wie o tej potężnej funkcji Wordpress.
Dwayne Charrington

1

Po przeczytaniu komentarza rozumiem, że chcesz zrobić coś takiego:

// Do something to get the ID
$facebook_id = ...

// Create and print the button
echo '<input onclick="FB.api('/'+'.$facebook_id.', 'delete')" />';

Nie, to jest strona, na której pracuję: funny-videoro.com/the-dark-knight-rises-trailer-oficial . Jeśli chcesz, możesz zalogować się na stronie. Następnie zobaczysz przycisk w stylu jquery ios. Kiedy zsuwam się, muszę usunąć posta za pomocą fb api. Identyfikator posta znajduje się w bazie danych.
Sebastian Corneliu Vîrlan

Cóż, to w zasadzie to, co napisałem w mojej odpowiedzi. Pobierz identyfikator z bazy danych i zapisz go w zmiennej. Następnie wydrukuj go bezpośrednio w jednowierszowym wywołaniu funkcji JavaScript. <input ... />A jego zadaniem było tylko do celów wykazania. O ile cię rozumiem, wszystko mówiło, czego potrzebujesz. Jeśli nie, spróbuj wyjaśnić coś więcej, ale w swoim pytaniu, a nie w komentarzach.
tfrommen 18.04.13

Nie chcę używać kodu php i js w tym samym wierszu, w wordpress są niektóre automatyczne funkcje ...
Sebastian Corneliu Vîrlan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.