ส่งผ่านตัวแปร PHP ไปยังจาวาสคริปต์


13

มีความเป็นไปได้ไหมที่จะส่งตัวแปร PHP บางตัวในจาวาสคริปต์เพื่อใช้ในภายหลัง?

single.phpเฉพาะใน
ฉันได้ยินเกี่ยวกับwp_enqueue_scriptsแต่ที่มันเป็นสิ่งจำเป็นที่จะประกาศเส้นทางไปยังไฟล์ JS แต่ฉันไม่ต้องการมัน


คุณทำอะไรตามมาทีหลังและคุณต้องการใช้ตัวแปรที่ไหน (เทียบกับตัวแปร PHP) แน่นอนคุณสามารถ echo / พิมพ์รหัสจาวาสคริปต์ผ่าน PHP และทำให้แทรกค่าตัวแปร PHP แต่นี่ไม่ใช่สิ่งที่คุณต้องการฉันเดาว่า ...
tfrommen

ฉันสร้างตาราง db ใหม่พร้อมกับการตอบกลับบางอย่างจาก facebook api นี่คือตาราง: action_id, user_id, post_id, fb_id โดยที่ fb_id คือการตอบกลับ id จากแอ็คชัน Facebook จากนั้นใน single.php ฉันมีปุ่มที่ถ้าฉันกดฉันต้องลบการกระทำ fb ด้วย api: FB.api ('/' + fb.response, 'ลบ'); โดยที่ fb.response ควรเป็น fb_id จากตาราง
Sebastian Corneliu Vîrlan

คำตอบ:


18

วิธีปฏิบัติที่ดีที่สุด

ลองดูที่wp_localize_scriptซึ่งตั้งใจจะทำอย่างนั้น

แต่มันต้องการการใช้งานก่อนหน้านี้wp_enqueue_scriptsดังนั้นคุณจะต้องย้าย JS ของคุณไปยังไฟล์แยกต่างหาก
มันจะคุ้มค่าไม่กี่นาทีของความพยายามแม้ว่าแน่นอน

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

ใน JS คุณจะสามารถใช้พารามิเตอร์ที่ส่งผ่านได้ดังนี้

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

[แก้ไข] สถานการณ์ของคุณ

ตามความคิดเห็นของคุณ

ฉันสร้างตาราง db ใหม่โดยใช้response.ids บางส่วนจาก facebook api นี่คือตาราง: action_id, user_id, post_id, fb_id โดยที่ fb_id คือการตอบกลับ id จากแอ็คชัน Facebook จากนั้นใน single.php ฉันมีปุ่มที่ถ้าฉันกดฉันต้องลบการกระทำ fb ด้วย api: FB.api('/'+fb.response, 'delete');ที่fb.responseควรจะfb_idมาจากตาราง

วาง/js/โฟลเดอร์ธีมของคุณต่อไปนี้สร้างมันหากไม่มีอยู่
มาเรียกไฟล์fb-response.jsกัน:

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

จากนั้นลงทะเบียนจัดคิวและแปลตามที่เห็นด้านบน สมมติว่าคุณมี ID ที่คุณต้องการส่งผ่านสมมติว่า$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 เห็นได้ชัดว่าข้างต้นสมมติว่าสิ่งนี้อยู่ในรูปแบบ หากเรากำลังพูดถึง "ปลั๊กอิน" ให้เปลี่ยนตำแหน่งตามนั้น


ฉันเป็น begginer เล็ก ๆ น้อย ๆ ในเรื่องนี้ดังนั้นผมจึงพยายามที่จะใช้นี้เพื่อ WordPress ฉัน: papermashup.com/jquery-iphone-style-ajax-switch อย่างที่คุณเห็นมีไฟล์ js และโค้ด js สองสามบรรทัดเพื่อใส่ในไฟล์การใช้งาน หรือฉันสามารถวางโค้ดสองสามบรรทัดลงในไฟล์อื่นได้หรือไม่
Sebastian Corneliu Vîrlan

ดังนั้นสำหรับการกระทำจาวาสคริปต์เล็ก ๆ ฉันควรสร้างไฟล์หรือไม่? ถ้าคุณว่างคุณสามารถเพิ่ม skype: sebyku17 ได้ไหม?
Sebastian Corneliu Vîrlan

ขึ้นอยู่กับสิ่งที่คุณต้องการทำในที่ที่คุณต้องการทำเช่นนั้นเป็นต้น โดยทั่วไป: ไม่คุณไม่ต้องใช้ไฟล์ JS ภายนอก แต่ถ้าคุณเลือกที่จะคุณสามารถใส่สิ่งที่คุณต้องการภายในไฟล์เดียว ไม่จำเป็นต้องมีหลายไฟล์หากคุณมีฟังก์ชั่นหลายอย่างหากเป็นสิ่งที่คุณขอ อย่างไรก็ตามคุณยอมรับแล้ว (IMHO ค่อนข้างซับซ้อนและในกรณีของคุณคำตอบเล็กน้อยเกินไป ) - โดยไม่เข้าใจอย่างที่ฉันเข้าใจ ไม่มีความผิด @Johannes ;)
tfrommen

1
ไม่ได้ถ่ายเลย @tf จนถึงตอนนี้อาจเป็นเกินขอบเขต แต่สำหรับรหัสของเขาอาจเติบโตและอีกคำถามเริ่มต้นพูดถึง "ตัวแปร" ในรูปแบบพหูพจน์ คำตอบของคุณนั้นใช้ได้แม้ว่า +1 จากฉัน
Johannes Pille

2
wp_localize_script เป็นฟังก์ชันที่ใช้งานไม่ได้และมีประสิทธิภาพมากสำหรับการส่งค่า PHP ไปยังไฟล์ Javascript เป็นเรื่องน่าแปลกใจที่มีคนไม่มากที่รู้เกี่ยวกับคุณสมบัติอันทรงพลังนี้ใน Wordpress
Dwayne Charrington

1

เมื่ออ่านความคิดเห็นของคุณแล้วฉันเข้าใจว่าคุณต้องการทำสิ่งนี้:

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

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

ไม่มีนี้เป็นหน้าเว็บที่ฉันทำงาน: funny-videoro.com/the-dark-knight-rises-trailer-oficial หากคุณต้องการคุณสามารถเข้าสู่เว็บไซต์ จากนั้นคุณจะเห็นปุ่มสไตล์ jquery ios เมื่อฉันเลื่อนไปที่ปิดฉันต้องลบด้วย fb api a โพสต์ รหัสโพสต์อยู่ใน db
Sebastian Corneliu Vîrlan

นั่นเป็นสิ่งที่ฉันเขียนไว้ในคำตอบของฉัน ดึงข้อมูล id จากฐานข้อมูลและเก็บไว้ในตัวแปร จากนั้นพิมพ์โดยตรงลงในการเรียกใช้ฟังก์ชัน JavaScript บรรทัดเดียวของคุณ <input ... />และฟังก์ชั่นของมันคือการแสดงให้เห็นสำหรับวัตถุประสงค์เฉพาะ เท่าที่ฉันเข้าใจคุณมีทุกสิ่งที่คุณต้องการ ถ้าไม่โปรดลองอธิบายเพิ่มเติม แต่ในคำถามของคุณไม่ใช่ในความคิดเห็น
tfrommen

ฉันไม่ต้องการที่จะใช้ PHP และ js รหัสในบรรทัดเดียวกันใน WordPress มีบางฟังก์ชั่นโดยอัตโนมัติ ...
เซบาสเตียน Corneliu Vîrlan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.