Giữa hàm.php, widget và plugin, cái nào được tải trước?


78

Khách hàng hỏi liệu một plugin băng chuyền cụ thể mà anh ta sử dụng có thể được tiện ích hóa không. Điều đó có nghĩa là tôi nên tạo một widget bên trong Hàm.php để gọi hàm của plugin. Điều đó có nghĩa là mã của plugin phải được tải trước để chức năng có sẵn cho WordPress khi tệp tin.php được tải, phải không? Liệu điều đó có hiệu quả?

Câu trả lời:


185

Các plugin được tải ngay trước chủ đề (vâng, tôi đã tìm kiếm lý do để sử dụng cái này):

nhập mô tả hình ảnh ở đây

Tuy nhiên, thật sai lầm khi nghĩ về một trong hai điểm thực thi mã. Đối với hầu hết các trường hợp, mọi thứ nên được nối và thực hiện không sớm hơn inithook. Theo đăng ký widget Codex với register_widget()nên được nối vào widget_init.

Do thứ tự tải đó không thành vấn đề trong trường hợp này, bạn sẽ có mọi thứ được tải bởi tiện ích thời gian cần nó trong mọi trường hợp.


3
Tải lõi WP sẽ không bao giờ có ý nghĩa.
gagarine

7
Bất kỳ cơ hội nào chúng ta có thể nhận được một biểu đồ cập nhật vào năm 2016? ;-)
jgraup

9
@jgraup bạn nói rằng giống như mọi thứ thay đổi trong lõi WordPress ... :)
Hiếm

1
@Rarst, touché ;-)
jgraup

2
@IsaacLubow có, những thứ trong hơn một cột chạy cho các bối cảnh tương ứng đó, vì bạn có thể thấy một khối lượng đáng kể của tải trọng lõi luôn liên quan đến bất kỳ yêu cầu nào.
Hết

16

Một cách tiếp cận thú vị là liệt kê tất cả các hook vào một tệp theo trình tự thực hiện.

add_action( 'all', '_20161224_printer' );
function _20161224_printer( $r ){

    $line =  microtime(true)*10000 . ' ' . $r .  "\n";
    $fp = fopen( ABSPATH . 'hooks.txt', 'a+');
    fwrite($fp, $line);
    fclose($fp);

}

Và bạn sẽ nhận được đầu ra như thế này:

14825992300742 pre_option_blog_charset
14825992300743 option_blog_charset
14825992300743 plugins_loaded
14825992300744 load_default_widgets
14825992300745 load_default_embeds
14825992300745 wp_audio_extensions
14825992300745 wp_audio_embed_handler
14825992300746 wp_video_extensions
14825992300746 wp_video_embed_handler
14825992300746 sanitize_comment_cookies
14825992300747 pre_option_permalink_structure
14825992300747 option_permalink_structure
14825992300748 pre_option_wp_user_roles
14825992300748 option_wp_user_roles
14825992300749 wp_roles_init
14825992300749 setup_theme
14825992300749 pre_option_template
14825992300750 option_template
14825992300750 template
14825992300750 theme_root
14825992300751 template_directory
14825992300751 pre_option_stylesheet
14825992300751 option_stylesheet
14825992300751 stylesheet
14825992300752 theme_root
14825992300752 stylesheet_directory
14825992300752 pre_option_WPLANG
14825992300753 query
14825992300754 default_option_WPLANG
14825992300755 locale
14825992300755 override_unload_textdomain
14825992300755 unload_textdomain
14825992300755 override_load_textdomain
14825992300756 load_textdomain
14825992300756 load_textdomain_mofile
14825992300756 locale
...
many many more action hooks
...
14825992302886 wp_parse_str
14825992302886 nonce_life
14825992302886 salt
14825992302886 wp_parse_str
14825992302887 esc_html
14825992302887 logout_url
14825992302887 clean_url
14825992302887 gettext
14825992302887 wp_after_admin_bar_render
14825992302888 pre_option_template
14825992302888 option_template
14825992302888 template
14825992302888 theme_root
14825992302888 template_directory
14825992302889 parent_theme_file_path
14825992302889 shutdown

Lưu ý rằng danh sách đầy đủ đơn giản là không thể phù hợp với giới hạn 30.000 ký tự cho mỗi bài đăng trên WPSO, vì vậy tôi đã xóa nhiều móc hành động.

Đặt mã ở trên trong một plugin. Nếu bạn làm điều đó từ các chủ đề functions.phpbạn sẽ không nắm bắt được plugins_loaded. Một bằng chứng khác các plugin được tải trước chủ đề.

Ưu điểm có thể có của kiểm tra này là rất nhiều, nhưng xin lưu ý rằng đầu ra sẽ khác nhau đối với các mẫu trang khác nhau mà bạn sẽ gọi hoặc nếu bạn đang ở trong bảng điều khiển.

Tôi chỉ đơn giản gọi nó từ /?p=1hoặc trang Hello World.

Nếu bạn không kích hoạt một plugin, bạn có thể đặt mã này vào mu-pluginsthư mục.

Có thể tốt hơn khi sử dụng WP FS API , nhưng cách này thực sự ngắn gọn.


Các plugin wp-admin bên trong được tải sau chủ đề hoặc theo thứ tự cài đặt ... và trong các plugin phía trước được tải trước chủ đề ...
Vishal Kumar Sahu

3

Bạn có thể có một tiện ích bên trong tệp .php của plugin (và có một biến toàn cục được chia sẻ mà cả hai có thể sử dụng), nếu đó là những gì bạn đang hỏi. Đây là một hướng dẫn với mã mẫu mà tôi tình cờ thấy được một lúc trước.

Ngoài ra, đây là danh sách các hành động chạy trong một yêu cầu thông thường , theo thứ tự thực hiện. # 2 và # 10 đề xuất rằng các plugin tải trước; không chắc chắn về hàm.php.


1
Chính xác, các plugin được tải trước các tập tin chủ đề. Nếu plugin bao gồm mã, nhưng không phải là tiện ích bạn muốn, có thể xác định tiện ích trong hàm.php của chủ đề.
Goldenapples
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.