Khi nào tôi nên sử dụng wp_register_script () với wp_enqueue_script () so với wp_enqueue_script ()?


54

Tôi đang gặp khó khăn khi hiểu khi bạn cần sử dụng wp_register_script(). Hiện tại, tôi chỉ sử dụng một cái gì đó như:

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

Tôi đã đọc rất nhiều (Codex, blog, v.v.), nhưng tôi không thể hiểu được khi nào tôi nên đăng ký trước, hay khi nào tôi nên đăng ký. Ví dụ, tôi nhận thấy TwentyTwelve không đăng ký bất kỳ phong cách hoặc tập lệnh nào, nó chỉ thu hút họ.

Câu trả lời:


49

Các wp_register_script()trang Codex nghĩa đen nói:

Một cách an toàn để đăng ký javascripts trong WordPress để sử dụng sau wp_enqueue_script().

Điều này có nghĩa, nếu bạn muốn đăng ký tập lệnh của mình, nhưng không tải trực tiếp chúng trong các trang của mình, bạn có thể đăng ký các tệp một lần, sau đó tải chúng khi bạn cần.

Ví dụ:

Bạn có một câu lệnh chuyển đổi sẽ tải một số chức năng, nhưng hai trong ba trường hợp cần một tệp javascript cụ thể và một trường hợp thì không. Bạn có thể enqueue script mỗi lần, sẽ tốn nhiều tài nguyên hơn hoặc chỉ enqueue script khi bạn cần nó:

...
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;
}

Không cần thiết phải đăng ký một tập lệnh và sau đó ghi lại chúng, nhưng nó có thể cung cấp một số logic trong mã của bạn nếu bạn đăng ký tất cả các tập lệnh bạn cần ở đâu đó functions.phpthay vì ở mọi nơi trong mã của bạn.

Codex cũng cho biết như sau:

Sử dụng wp_enqueue_scriptshành động để gọi chức năng này hoặc admin_enqueue_scriptsgọi nó ở phía quản trị viên.

Điều này có nghĩa là nếu bạn muốn ghi lại tập lệnh của mình ở đầu cuối ở mặt sau, bạn có thể đăng ký tập lệnh một lần, sau đó tải tập lệnh ở mặt trước với wp_enqueue_scriptvà ở mặt sau với admin_enqueue_script.
Bằng cách này, bạn sẽ không có cùng một lần truy vấn enqueue hai lần trong một chủ đề, plugin, widget hoặc bất cứ điều gì.


Cảm ơn bạn. Điều đó đã xóa nó lên rất nhiều. Vì vậy, bạn có nghĩ rằng TwentyTwelve không bận tâm đăng ký trước vì chắc chắn sẽ tải chúng không?
akTed

Đó chắc chắn có thể là một khả năng. Tôi không biết chủ đề Twenty Tw 12 được xây dựng như thế nào vì tôi không bao giờ sử dụng nó, nhưng họ chắc chắn sẽ có lý do để enqueuethay thế register.
Mike Madern

2
Theo nghĩa đó, tôi không đồng ý với "Bạn có thể tranh thủ kịch bản mọi lúc, sẽ tốn nhiều tài nguyên hơn hoặc chỉ thu hút kịch bản khi bạn cần". Trong mã ví dụ của bạn, bạn có thể xóa cuộc gọi đăng ký và thay vào đó có nhiều cuộc gọi tương đương đầy đủ (với $ src arg) tới wp_enqueue_style(). Đây sẽ chỉ là nỗ lực gõ nhiều hơn, nhưng không dẫn đến yêu cầu tài nguyên lớn hơn. Chính xác?
Jan-Philip Gehrcke

7
Một điểm bị bỏ qua bởi tất cả các giải thích cho đến nay là, bạn có thể sử dụng wp_register_script()để chỉ đăng ký một tập lệnh để nó có thể được sử dụng như một phần phụ thuộc cho các tập lệnh khác và chỉ được tải với chúng, mà không bao giờ được xử lý trực tiếp.
JHoffmann

1
Mặc dù điều này giải thích nó tốt, tôi cũng khuyên bạn nên đọc câu trả lời này .
lowTechsun

8

IMHO lợi thế chính của việc sử dụng wp_register_scripttrước wp_enqueue_scriptsđược minh họa trong đoạn sau từ Codex :

Các tập lệnh đã được đăng ký trước bằng wp_register_script () không cần phải được xử lý thủ công bằng cách sử dụng wp_enqueue_script () nếu chúng được liệt kê là phần phụ thuộc của tập lệnh khác được xử lý. WordPress sẽ tự động bao gồm tập lệnh đã đăng ký trước khi tập lệnh bao gồm tập lệnh được liệt kê liệt kê xử lý tập lệnh đã đăng ký dưới dạng phụ thuộc.

Nếu bạn tin rằng bạn không cần điều này (ví dụ: vì bạn chắc chắn 100% rằng kịch bản của bạn sẽ không liên quan đến bất kỳ sự phụ thuộc nào), bạn có thể có thể trực tiếp đi cùng wp_enqueue_scriptsmà không cần sơ bộ wp_register_script.


2

Tôi đã trải qua một số bài viết và đi đến kết luận sau đây. Tôi nghĩ rằng nó giúp.

  1. Đăng ký bất kỳ tập lệnh sử dụng wp_register_script()chỉ là đăng ký; không tải nó Tập lệnh đã đăng ký sẽ không được tải cho đến khi sử dụng wp_enqueue_script().
  2. Chúng ta không cần phải đăng ký và đăng ký đồng thời từng đoạn script. Chúng ta chỉ nên enqueue. Đăng ký không bắt buộc vì wp_enqueue_script()chức năng tự động đăng ký tập lệnh.
  3. Nhưng chúng tôi cần phải đăng ký trong khi chúng tôi đang ở trong bất kỳ tình huống nào sau đây:

    a. Giả sử chúng ta cần một tập lệnh để tải vào nhiều nơi như một lần ở mặt trước và một lần ở phía sau (trang quản trị). Bây giờ chúng ta có thể đăng ký tập lệnh chỉ một lần. Và sau đó enqueue nó ở front-end và back-end riêng lẻ. Hãy nhìn, enqueueing có nghĩa là tải. Đăng ký không có nghĩa là tải. Trong trường hợp chúng tôi không đăng ký, nó sẽ được đăng ký tự động nhiều lần khi chúng tôi đăng ký. Mặt khác, nếu chúng ta đăng ký một lần, nó sẽ được đăng ký một lần, bất kể chúng ta có bao nhiêu lần chinh phục nó.

    b. Nếu chúng ta muốn sử dụng một tập lệnh như một phần phụ thuộc của các tập lệnh khác, thì chúng ta không cần phải ghi lại nó wp_enqueue_script(). Chỉ cần đăng ký với wp_register_script(). Và nó sẽ được tự động xử lý khi chúng ta sử dụng tên xử lý của nó như là một sự phụ thuộc của các tập lệnh khác được xử lý wp_enqueue_script().

    c. Nếu chúng ta muốn tập lệnh được tải khi cần thiết chứ không phải được tải cùng một lúc, chúng ta có thể đăng ký nó để sử dụng sau. Các trường hợp sử dụng đã được hiển thị ở trên.

NB Theo như tôi tin, có thể rút ra kết luận tương tự cho các bảng định kiểu CSS. Tôi muốn nói rằng chúng ta có thể sử dụng wp_register_style()wp_enqueue_style()theo cùng một cách.

Lưu ý rằng kết luận rút ra ở đây phản ánh suy luận của riêng tôi. Nếu tôi sai, xin vui lòng sửa cho tôi. Và bạn có thể đã đạt được một kết luận khác và tốt hơn nhiều. Nếu điều đó là như vậy, xin vui lòng cho chúng tôi biết. Ai biết? Có lẽ của bạn là tốt nhất. Khi nói đi, “Như nhiều nguyên lý, như nhiều cách để cứu rỗi.” :)

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


Giải thích của bạn là tốt nhất tôi đã đọc. Bây giờ tôi hiểu tại sao điều quan trọng là phải đăng ký tập lệnh. Cảm ơn bạn!
Jee
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.