Trong quá trình tải lõi WP của vanilla, người dùng hiện tại đang được thiết lập $wp-init()
, sau khi tải chủ đề và trước khi init
móc. Điều này phù hợp với thực tiễn tốt về chức năng được nối đến init
hoặc sau này.
Tuy nhiên, đó cũng là thông lệ để gọi các chức năng liên quan, chẳng hạn như current_user_can()
sớm hơn thế. Đó là theo định nghĩa cần thiết cho các plugin hoạt động với các giai đoạn trước của quá trình tải (plugin Thanh công cụ chuyển đổi chủ đề của tôi sẽ là một ví dụ).
Tài liệu làm cho không có yêu cầu cho hoặc chống lại thực tiễn này (mà tôi có thể tìm thấy).
Tuy nhiên, một số plugin dường như liên kết với chức năng liên quan đến người dùng và mong đợi init
trạng thái bài đăng của mọi lúc.
Ví dụ: bbPress ném thông báo sau:
// If the current user is being setup before the "init" action has fired,
// strange (and difficult to debug) role/capability issues will occur.
if ( ! did_action( 'after_setup_theme' ) ) {
_doing_it_wrong( __FUNCTION__, __( 'The current user is being initialized without using $wp->init().', 'bbpress' ), '2.3' );
}
Để trình diễn nhanh, hãy đưa điều này vào định nghĩa cốt lõi của current_user_can()
:
function current_user_can( $capability ) {
if ( ! did_action('after_setup_theme') ) {
echo wp_debug_backtrace_summary();
}
Ai là người quyền lực trong tình huống này? Có một quyết định chính tắc nào về việc sử dụng được phép / cấm sử dụng các chức năng liên quan đến người dùng trước đây init
không?