เมื่อใดที่ฉันควรใช้ wp_register_script () กับ wp_enqueue_script () เทียบกับเพียงแค่ wp_enqueue_script ()


54

wp_register_script()ฉันมีปัญหาในการทำความเข้าใจเมื่อคุณจำเป็นต้องใช้ ขณะนี้ฉันเพิ่งใช้สิ่งที่ชอบ:

add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
function enqueue() {
    $handle = 'some-handle';
    $js = 'http://example.com/my.js';
    wp_register_script( $handle, $js );
    wp_enqueue_script( $handle );
}

ฉันอ่านจำนวนมากแล้ว (Codex บล็อก ฯลฯ ) แต่ก็ไม่ค่อยเข้าใจเท่าไหร่เมื่อฉันควรลงทะเบียนก่อนหรือเมื่อฉันควรเข้าคิว ตัวอย่างเช่นฉันสังเกตเห็นว่าTwentyTwelveไม่ได้ลงทะเบียนสไตล์หรือสคริปต์ใด ๆ มันแค่ทำให้พวกเขาประหลาดใจ

คำตอบ:


49

wp_register_script()หน้า Codexแท้จริง says:

วิธีที่ปลอดภัยของการลงทะเบียน javascripts ใน WordPress wp_enqueue_script()เพื่อใช้ในภายหลังด้วย

ซึ่งหมายความว่าหากคุณต้องการลงทะเบียนสคริปต์ของคุณ แต่ไม่โหลดโดยตรงในหน้าของคุณคุณสามารถลงทะเบียนไฟล์หนึ่งครั้งแล้วโหลดพวกเขาเมื่อคุณต้องการ

ตัวอย่างเช่น:

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

...
wp_register_script( 'my-handy-javascript', ... );
...
switch( $somevar ) {
    case 'value':
        wp_enqueue_script( 'my-handy-javascript' ); // needs the file
        ...
    break;
    case 'value2':
        wp_enqueue_script( 'my-handy-javascript' ); // needs the file
        ...
    break;
    default:
    case 'value3': // doesn't needs the file
        ...
    break;
}

ไม่จำเป็นต้องลงทะเบียนสคริปต์จากนั้นจัดคิวให้มัน แต่สามารถให้ตรรกะบางอย่างในรหัสของคุณหากคุณลงทะเบียนสคริปต์ทั้งหมดที่คุณต้องการที่ไหนสักแห่งในfunctions.phpแทนที่จะเป็นทุกที่ในรหัสของคุณ

Codex ยังบอกสิ่งต่อไปนี้:

ใช้การwp_enqueue_scriptsกระทำเพื่อเรียกใช้ฟังก์ชั่นนี้หรือadmin_enqueue_scriptsโทรไปที่ด้านผู้ดูแลระบบ

ซึ่งหมายความว่าหากคุณต้องการที่จะ enqueue สคริปต์ของคุณบนเฟินสิ้นและใน back-end คุณสามารถลงทะเบียนสคริปต์ครั้งเดียวแล้วโหลดบน Front-end ด้วยwp_enqueue_scriptและใน back-end admin_enqueue_scriptด้วย
ด้วยวิธีนี้คุณจะไม่ได้รับการเข้าคิวแบบเดียวกันสองครั้งในหนึ่งธีมปลั๊กอินวิดเจ็ตหรืออะไรก็ตาม


ขอขอบคุณ. เคลียร์มันมากขึ้น ดังนั้นคุณคิดว่า TwentyTwelve ไม่ได้สนใจที่จะลงทะเบียนก่อนเพราะมันจะโหลดได้อย่างแน่นอน?
akTed

แน่นอนว่าอาจเป็นไปได้ ผมไม่ทราบว่าธีมยี่สิบสิบสองถูกสร้างตั้งแต่ฉันไม่เคยใช้ แต่พวกเขาแน่ใจว่าจะมีเหตุผลของพวกเขาที่จะอยู่ในสถานที่ของenqueue register
Mike Madern

2
ในกรณีดังกล่าวฉันไม่เห็นด้วยกับ "คุณสามารถจัดคิวสคริปต์ได้ทุกครั้งซึ่งมีค่าใช้จ่ายเพิ่มขึ้นหรือเพิ่มคิวให้สคริปต์เมื่อคุณต้องการ" ในโค้ดตัวอย่างของคุณคุณสามารถลบการเรียกใช้การลงทะเบียนและมีการเรียกแบบเต็มจำนวน ( เทียบเท่ากับ $ src arg) wp_enqueue_style()แทน นี่เป็นเพียงความพยายามในการพิมพ์ที่มากขึ้น แต่ไม่ได้ส่งผลให้เกิดความต้องการทรัพยากรที่มากขึ้น แก้ไข?
Jan-Philip Gehrcke

7
จุดหนึ่งที่ถูกอธิบายโดยคำอธิบายทั้งหมดจนถึงตอนนี้คือคุณสามารถใช้wp_register_script()เพื่อลงทะเบียนสคริปต์เพื่อให้สามารถใช้เป็นการอ้างอิงสำหรับสคริปต์อื่น ๆ และโหลดกับพวกเขาเท่านั้นโดยไม่ต้องลงทะเบียนโดยตรง
JHoffmann

1
แม้ว่าสิ่งนี้จะอธิบายได้ดีฉันก็ขอแนะนำให้อ่านคำตอบนี้ด้วย
lowtechsun

8

IMHO ข้อได้เปรียบหลักของการใช้งานwp_register_scriptก่อนหน้าwp_enqueue_scriptsนี้แสดงไว้ในย่อหน้าต่อไปนี้จากCodex :

สคริปต์ที่ลงทะเบียนล่วงหน้าโดยใช้ wp_register_script () ไม่จำเป็นต้องเข้าคิวด้วยตนเองโดยใช้ wp_enqueue_script () หากมีการระบุว่าเป็นการขึ้นต่อกันของสคริปต์อื่นที่เข้าคิว WordPress จะรวมสคริปต์ที่ลงทะเบียนโดยอัตโนมัติก่อนที่จะมีสคริปต์ที่เข้าคิวซึ่งแสดงรายการหมายเลขอ้างอิงของสคริปต์ที่ลงทะเบียนเป็นการอ้างอิง

หากคุณเชื่อว่าคุณไม่จำเป็นต้องนี้ (เช่นเพราะคุณเป็น 100% แน่ใจว่าสคริปต์ของคุณจะไม่ได้มีส่วนร่วมในการพึ่งพาใด ๆ ) คุณอาจจะสามารถไปโดยตรงกับโดยไม่ต้องเบื้องต้นwp_enqueue_scriptswp_register_script


2

ฉันได้อ่านบทความมาแล้วและได้ข้อสรุปดังต่อไปนี้ ฉันคิดว่ามันช่วย

  1. การลงทะเบียนสคริปต์ใด ๆ ที่ใช้wp_register_script()เป็นเพียงการลงทะเบียน; ไม่โหลด wp_enqueue_script()สคริปต์ที่ลงทะเบียนจะไม่สามารถโหลดได้จนกว่าจะมีการใช้ enqueued
  2. เราไม่จำเป็นต้องลงทะเบียนและจัดคิวสคริปต์แต่ละบทพร้อมกัน เราควรเข้าคิว การลงทะเบียนไม่จำเป็นเนื่องจากwp_enqueue_script()ฟังก์ชันจะลงทะเบียนสคริปต์โดยอัตโนมัติ
  3. แต่เราจำเป็นต้องลงทะเบียนขณะที่เราอยู่ในสถานการณ์ต่อไปนี้:

    สมมติว่าเราต้องการสคริปต์เพื่อโหลดไปยังที่มากกว่าหนึ่งแห่งเช่น front-end และอีกครั้งใน back-end (หน้า admin) ตอนนี้เราสามารถลงทะเบียนสคริปต์เพียงครั้งเดียว จากนั้นจัดคิวให้มันใน front-end และ back-end ทีละรายการ ดูการเข้าคิวหมายถึงการโหลด การลงทะเบียนไม่ได้หมายถึงการโหลด ในกรณีที่เราไม่ได้ลงทะเบียนมันจะถูกลงทะเบียนโดยอัตโนมัติหลาย ๆ ครั้งตามที่เราลงทะเบียน ในทางกลับกันถ้าเราลงทะเบียนครั้งเดียวมันจะถูกลงทะเบียนครั้งเดียวไม่ว่าเราจะเข้าคิวกี่ครั้ง

    ข ถ้าเราต้องการที่จะใช้สคริปต์เป็นพึ่งพาของสคริปต์อื่น ๆ แล้วเราไม่จำเป็นต้อง enqueue wp_enqueue_script()มันด้วย wp_register_script()เพียงลงทะเบียนกับ และมันจะถูก enqueued โดยอัตโนมัติเมื่อเราใช้มันจัดการชื่อเป็นพึ่งพาของสคริปต์อื่น ๆ enqueued wp_enqueue_script()ด้วย

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

NB เท่าที่ฉันเชื่อมั่นข้อสรุปเดียวกันสามารถวาด CSS สไตล์ชีต ฉันหมายความว่าเราสามารถใช้wp_register_style()และwp_enqueue_style()ในลักษณะเดียวกัน

โปรดทราบว่าข้อสรุปที่นี่สะท้อนให้เห็นถึงการหักเงินของฉันเอง ถ้าฉันผิดโปรดแก้ไขฉันด้วย และคุณอาจได้ข้อสรุปที่แตกต่างและดีกว่านี้มาก หากเป็นเช่นนั้นโปรดแจ้งให้เราทราบ ใครจะรู้? บางทีคุณอาจจะดีที่สุด เป็นว่าไป, “หลักคำสอนเป็นจำนวนมากเช่นหลายวิธีที่จะรอด.” :)

https://sxbook.blogspot.com/2018/12/wpregisterscript-when-to-use.html


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