Đâu là nơi thích hợp để đăng ký / enqueue script & style


43

Tôi đang sử dụng WordPress 3.1.4. Tôi bối rối không biết tôi sử dụng cái móc nào:

  • để đăng ký và / hoặc enqueue
  • kịch bản và phong cách
  • ở mặt trước và mặt sau?

Câu hỏi:

  • Đó là móc phải để sử dụng?
  • Tất cả các kịch bản / phong cách đăng ký kết thúc trước init?
  • Tại sao không có admin_print_styles-{xxx}?

Câu trả lời:


62

Tại sao đăng ký và xếp hàng đúng vấn đề

  • cần kịp thời - sớm hơn kịch bản / kiểu sẽ được xuất ra trang, nếu không thì quá muộn;

  • nó phải có điều kiện - nếu không bạn đang tải những thứ mà bạn không cần nó và gây ra các vấn đề về hiệu năng và chức năng, vì điều này bạn cần môi trường WP được tải đến giai đoạn cuối.

Ba giai đoạn của quá trình

  1. đăng ký - điều này giải thích chi tiết WP về script / style và làm cho nó lưu trữ thông tin đó;

  2. enqueue - (thường được gộp chung với đăng ký trong một wp_enqueue_*()cuộc gọi) - điều này cho WP biết để thêm tập lệnh / kiểu vào hàng đợi, theo cài đặt của nó (phụ thuộc, tải tiêu đề / chân trang).

  3. in - điều này xảy ra khi WP xử lý hàng đợi, cố gắng tải một cái gì đó cụ thể cho chính nó hoặc khi bạn thực hiện nó với wp_print_*()chức năng.

Cấu trúc mặt trước của các chức năng và móc

  • wp_head()

    • wp_head

      • (1) wp_enqueue_scripts()

        wp_enqueue_scripts " đây là những gì bạn cần

      • (số 8) wp_print_styles()

      • (9) wp_print_head_scripts()

  • wp_footer()

    • wp_footer

      • (10) wp_print_footer_scripts()

Nó đi sâu hơn nhiều, nhưng điều này đơn giản và đủ tốt cho những điểm quan trọng:

  • wp_enqueue_scriptslà móc thích hợp nhất để đăng ký và xếp hàng các tập lệnh và kiểu ở giao diện người dùng và nó đặc biệt dành cho điều đó;

  • initkhông có gì để làm với điều này, nó sẽ hoạt động, nhưng - khuyến nghị trước đây của Codex chỉ sử dụng nó là không chính xác ;

  • bạn có thể thoát khỏi các tập lệnh xếp hàng (không phải kiểu) cho chân trang tại bất kỳ thời điểm nào trước khi wp_print_footer_scripts()gọi;

  • wp_print_*hook KHÔNG thích hợp cho đăng ký / hàng đợi , chúng là các điểm trong mã khi đầu ra đã xảy ra. Chúng thích hợp cho đầu ra thủ công / tùy chỉnh tập lệnh / kiểu.

Còn quản trị viên thì sao?

Vâng, các chức năng ở đó thậm chí còn phức tạp hơn, công phu và lồng nhau.

  • đối với người mới bắt đầu chỉ cần sử dụng admin_enqueue_scriptshook (nó được truyền $hook_suffixtoàn cầu cho các công cụ có điều kiện ) cho mọi thứ, nó sẽ làm tốt cho hầu hết các trường hợp;

  • khi bạn cần một cái gì đó phức tạp - nhìn qua admin-header.phpvà đào từ đó để có móc phù hợp.

Đăng nhập thì sao?

Có một cái móc cụ thể được đặt tên login_enqueue_scripts.


Hmm trong một câu trả lời khác cho một câu hỏi khác , tôi đã được đề nghị admin_print_scripts-{xxx}. Tôi thấy rằng admin_print_scriptsđã được gọi nhưng không phải với -{xxx}ví dụ. -edit.phpví dụ. Câu trả lời đúng như thế nào về sự mê admin_print_scripts-xxxhoặc và những gì bạn sẽ đề xuất thay vào đó - giả sử tôi muốn bao gồm các tập lệnh / kiểu trong một trang thêm / chỉnh sửa loại bài đăng tùy chỉnh (cho metabox)
JM tại Work

5
@JM tại nơi làm việc như trên ý kiến ​​cá nhân của tôi - tránh xa các *print*móc nối trừ khi bạn thực sự biết tại sao bạn cần chúng. Và tổng thể chúng là để in , không phải xếp hàng . admin_enqueue_scriptshook vượt qua $hook_suffixbiến tương tự như được sử dụng trong các hook động đó.
Rarst

$hook_suffixTrông giống như post.php trong trang danh mục chỉnh sửa của tôi tại sao vậy? Tôi cũng nghĩ đó là edit.php, làm thế nào để tôi xác định xem tôi có đang chỉnh sửa / đăng một danh mục đầu tư & không phải là một bài viết bình thường không?
JM tại nơi làm việc

@JM tại Works Thành thật mà nói, biến đó hơi khó chịu :) Trong plugin riêng, việc xử lý nó dễ dàng hơn (trả về add_*_page()chức năng), nhưng trong màn hình WP gốc, nó có thể là những thứ khác nhau.
Rarst

Thật không may khi tôi thay đổi hook từ wp_footer thành wp_enqueue_scripts hoặc admin_print_scripts CSS biến mất và không hiển thị ở bất cứ đâu trong mã nguồn. Đây là mã tôi sử dụng: add_action ('wp_enqueue_scripts', 'addCSS'); Điều đó KHÔNG hoạt động, điều này KHÔNG hoạt động add_action ('wp_enqueue_scripts', 'addCSS'); ngoại trừ nó rõ ràng thêm CSS vào chân trang. Tôi đang làm gì sai?
Talon
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.