วิธีจัดคิว JavaScript ในปลั๊กอิน


14

ฉันดิ้นรนมากเวลานี้ทำงานรวมถึงไฟล์ JavaScript ในโฟลเดอร์ปลั๊กอิน

ฉันกำลังพยายามสร้างปลั๊กอินโดยถ่ายโอนไฟล์วิดเจ็ตจากไดเรกทอรีธีม ฉันคัดลอกไฟล์วิดเจ็ต แต่ไฟล์วิดเจ็ตนั้นขึ้นอยู่กับไฟล์ JavaScript ดังนั้นฉันจึงสร้าง a / js / โฟลเดอร์ในไดเรกทอรีปลั๊กอิน ที่ซึ่งไฟล์นี้โฮสต์อยู่ "jquery.repeatable.js"

ฉันใช้รหัสนี้ แต่ดูเหมือนจะไม่รวมไฟล์ js -

function Zumper_widget_enqueue_script()
{   
    wp_enqueue_script( 'my_custom_script', plugin_dir_url( __FILE__ ) . 'js/jquery.repeatable.js' );
}
add_action('admin_enqueue_scripts', 'Zumper_widget_enqueue_script');

ฉันค้นหาสิ่งนี้ในฟอรัม - /programming/31489615/call-a-js-file-from-a-plugin-directory

แต่ก็ยังไม่เป็นประโยชน์

ฉันสรุปคำถามของฉันอีกครั้ง ในไดเรกทอรีปลั๊กอินของฉันมีไฟล์ js อยู่ภายใต้โฟลเดอร์นี้ - / js /

ฉันต้องการรวมไว้ในกระบวนการที่ถูกต้องฉันต้องลงทะเบียนอะไรด้วยหรือไม่

มีบางอย่างผิดปกติกับส่วนนี้'admin_enqueue_scripts'หรือไม่?


คำตอบ:


30

รหัสของคุณดูเหมือนว่าถูกต้อง แต่มันจะโหลดสคริปต์เฉพาะในพื้นที่ admin เพราะว่าคุณกำลัง enqueuing สคริปต์ในการดำเนินการadmin_enqueue_scripts

ในการโหลดสคริปต์ในส่วนหน้าให้ใช้wp_enqueue_scriptsการกระทำ (ซึ่งไม่เหมือนกับwp_enqueue_script()ฟังก์ชันนั้น):

function Zumper_widget_enqueue_script() {   
    wp_enqueue_script( 'my_custom_script', plugin_dir_url( __FILE__ ) . 'js/jquery.repeatable.js' );
}
add_action('wp_enqueue_scripts', 'Zumper_widget_enqueue_script');

นอกจากนี้สคริปต์นั้นดูเหมือนจะขึ้นอยู่กับ jQuery ดังนั้นคุณควรประกาศว่าพึ่งพาหรือไม่สามารถโหลดสคริปต์ก่อน jQuery และมันจะไม่ทำงาน นอกจากนี้ฉันขอแนะนำอย่างยิ่งให้ประกาศรุ่นของ scripot วิธีนี้หากคุณอัปเดตสคริปต์เป็นเวอร์ชันใหม่เบราว์เซอร์จะโหลดซ้ำอีกครั้งและทิ้งสำเนาที่อาจมีอยู่ในแคช

ตัวอย่างเช่นหากเวอร์ชันของสคริปต์คือ 1.0:

function Zumper_widget_enqueue_script() {   
    wp_enqueue_script( 'my_custom_script', plugin_dir_url( __FILE__ ) . 'js/jquery.repeatable.js', array('jquery'), '1.0' );
}
add_action('wp_enqueue_scripts', 'Zumper_widget_enqueue_script');

หากคุณต้องการโหลดมันในพื้นที่ผู้ดูแลระบบ:

function Zumper_widget_enqueue_script() {   
    wp_enqueue_script( 'my_custom_script', plugin_dir_url( __FILE__ ) . 'js/jquery.repeatable.js', array('jquery'), '1.0' );
}
add_action('admin_enqueue_scripts', 'Zumper_widget_enqueue_script');

1

UPDATED:

ใช้รหัสนี้แทน

function Zumper_widget_enqueue_script()
{   
    wp_enqueue_script( 'my_custom_script', plugin_dir_url( __FILE__ ) . 'js/jquery.repeatable.js', array('jquery'), '1.0.0', false );
}
add_action('admin_enqueue_scripts', 'Zumper_widget_enqueue_script');

พารามิเตอร์ที่สามคือการประกาศการพึ่งพาและที่สี่คือการกำหนดรุ่น

ตั้งค่าพารามิเตอร์ของ 5rd ไปwp_enqueue_script() trueนั่นคือความหมายไฟล์นี้จะถูกโหลดในส่วนท้าย


พารามิเตอร์ที่สามของwp_enqueue_script()คือการประกาศการพึ่งพาสคริปต์ พารามิเตอร์ที่ห้าคือตัวเลือกหนึ่งหากคุณต้องการโหลดสคริปต์ในส่วนท้ายหรือในส่วนหัว อย่างไรก็ตามฉันไม่คิดว่าสถานที่ที่จะโหลดสร้างความแตกต่าง
cybmeta

ขอบคุณ ฉันอ่านบางปลั๊กอินอื่น ๆ ที่บางอันทำเช่นนี้ - wp_enqueue_script ('zumper', get_template_directory_uri (). '/js/jquery.zumper.min.js',array('jquery'),false,true); คุณพูดว่าการตั้งค่าที่ 3 เป็นจริงหมายความว่ามันจะโหลดในส่วนท้ายดังนั้นชุดค่าผสมที่เป็นเท็จนี้หมายความว่าอย่างไร
WP Intermediate

ฉันได้อัพเดตคำตอบแล้ว มันใช้งานได้หรือไม่
mukto90

1

ฉันปกติใช้plugins_url ()วิธีการเพื่อให้ได้คิว

function Zumper_widget_enqueue_script()
{   
    wp_enqueue_script( 'my_custom_script', plugins_url('js/jquery.repeatable.js', __FILE__ ), '1.0.0', false );
}
add_action('admin_enqueue_scripts', 'Zumper_widget_enqueue_script');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.