Lulus variabel PHP ke javascript


13

Apakah ada kemungkinan untuk melewatkan beberapa variabel PHP dalam javascript sehingga saya dapat menggunakannya nanti?

Hanya di single.php.
Saya mendengar tentang wp_enqueue_scriptstetapi dengan itu perlu untuk menyatakan path ke file JS, tapi saya tidak membutuhkannya.


Apa yang Anda maksudkan dengan nanti , dan di mana Anda ingin menggunakan variabel (sehubungan dengan di mana variabel PHP berada)? Tentu saja Anda dapat echo / mencetak kode JavaScript melalui PHP, dan dengan demikian memasukkan nilai variabel PHP. Tapi ini bukan yang Anda inginkan, saya kira ...
tfrommen

Saya membuat tabel db baru dengan beberapa response.id`s dari facebook api. Ini adalah tabel: action_id, user_id, post_id, fb_id di mana fb_id adalah response.id dari tindakan facebook. Kemudian di single.php saya memiliki tombol di mana jika saya menekan saya harus menghapus tindakan fb dengan api: FB.api ('/' + fb.response, 'delete'); di mana fb.response harus fb_id dari tabel.
Sebastian Corneliu Vîrlan

Jawaban:


18

Metode praktik terbaik

Lihatlah wp_localize_script , yang dimaksudkan untuk melakukan hal itu.

Tetapi memang membutuhkan penggunaan sebelumnyawp_enqueue_scripts , maka Anda perlu memindahkan JS Anda ke file yang terpisah.
Akan bernilai beberapa menit saja, tentu saja.

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' );

Di JS Anda akan dapat menggunakan parameter yang dikirimkan seperti:

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] );
}

[Sunting] Situasi Anda

Sesuai komentar Anda

Saya membuat tabel db baru dengan beberapa response.iddari facebook api. Ini adalah tabel: action_id, user_id, post_id, fb_id di mana fb_id adalah response.id dari tindakan facebook. Kemudian di single.php saya memiliki tombol di mana jika saya menekan saya harus menghapus aksi fb dengan api: di FB.api('/'+fb.response, 'delete');mana fb.responseharus fb_iddari tabel.

Letakkan berikut /js/folder tema Anda , buat, jika tidak ada.
Mari kita panggil file fb-response.js:

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

Kemudian daftarkan, enqueue dan pelokalkan seperti terlihat di atas. Dengan asumsi bahwa Anda memiliki ID yang ingin Anda sampaikan katakanlah $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 Jelas, di atas menganggap ini dalam sebuah tema. Jika kita berbicara "plugin", ubah lokasi sesuai.


Saya sedikit pemula dalam hal ini, jadi saya mencoba menerapkan ini ke wordpress saya: papermashup.com/jquery-iphone-style-ajax-switch . Seperti yang Anda lihat ada file js dan beberapa baris kode js untuk dimasukkan ke file penggunaan. Atau saya dapat meletakkan beberapa baris kode pada file lain?
Sebastian Corneliu Vîrlan

Jadi untuk tindakan javascript kecil apa saya harus membuat file? Jika Anda avaible dapat Anda tambahkan di skype: sebyku17?
Sebastian Corneliu Vîrlan

Itu tergantung pada apa yang ingin Anda lakukan, di mana Anda ingin melakukan itu, dan seterusnya. Secara umum: Tidak, Anda tidak harus menggunakan file JS eksternal. Tetapi jika Anda mau, Anda dapat meletakkan apa pun yang Anda inginkan di dalam satu file . Tidak perlu banyak file jika Anda memiliki banyak fungsi, jika itu yang Anda tanyakan. Namun, Anda sudah menerima jawaban ini (IMHO cukup rumit dan dalam kasus Anda sedikit berlebihan ) - tanpa sepenuhnya dipahami, seperti yang saya ambil. Jangan tersinggung, @Johannes. ;)
tfrommen

1
Tidak ada yang diambil, @tf. Sejauh ini mungkin garis batas berlebihan, tetapi untuk satu kodenya mungkin tumbuh dan untuk yang lain, pertanyaan awal berbicara tentang "variabel", dalam bentuk jamak. Namun, jawaban Anda sama validnya, jadi +1 dari saya.
Johannes Pille

2
wp_localize_script adalah fungsi yang sangat kurang dimanfaatkan dan kuat untuk meneruskan nilai PHP ke file Javascript. Mengejutkan tidak banyak orang yang benar-benar tahu tentang fitur hebat ini di Wordpress.
Dwayne Charrington

1

Setelah membaca komentar Anda, saya mengerti Anda ingin melakukan sesuatu seperti ini:

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

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

Tidak, ini adalah halaman tempat saya bekerja: funny-videoro.com/the-dark-knight-rises-trailer-oficial . Jika mau, Anda dapat masuk ke situs web. Maka Anda akan melihat tombol gaya jquery ios. Ketika saya geser ke off saya harus menghapus dengan posting fb api. Id posting ada di db.
Sebastian Corneliu Vîrlan

Ya, pada dasarnya itulah yang saya tulis dalam jawaban saya. Ambil id dari database dan simpan dalam variabel. Kemudian langsung cetak ke panggilan fungsi JavaScript satu baris Anda. Dan <input ... />fungsinya hanya untuk menunjukkan tujuan. Sejauh yang saya mengerti Anda, ada segalanya yang mengatakan apa yang Anda butuhkan. Jika tidak, coba jelaskan lebih lanjut, tetapi dalam pertanyaan Anda, bukan dalam komentar.
tfrommen

Saya tidak ingin menggunakan kode php dan js di baris yang sama, di wordpress ada beberapa fungsi yang otomatis ...
Sebastian Corneliu Vîrlan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.