Khi các bài đăng nhận dữ liệu của chúng được thiết lập thông qua the_post()
(tương ứng thông qua setup_postdata()
) và do đó có thể truy cập thông qua API ( get_the_ID()
ví dụ), hãy giả sử rằng chúng tôi đang lặp qua một nhóm người dùng (khi setup_userdata()
điền vào các biến toàn cục của người dùng hiện đang đăng nhập và không ' t hữu ích cho nhiệm vụ này) và cố gắng hiển thị dữ liệu meta cho mỗi người dùng:
<?php
get_header();
// etc.
// In the main template file
$users = new \WP_User_Query( [ ... ] );
foreach ( $users as $user )
{
set_query_var( 'user_id', absint( $user->ID ) );
get_template_part( 'template-parts/user', 'contact_methods' );
}
Sau đó, trong wpse-theme/template-parts/user-contact_methods.php
tệp của chúng tôi , chúng tôi cần truy cập ID người dùng:
<?php
/** @var int $user_id */
$some_meta = get_the_author_meta( 'some_meta', $user_id );
var_dump( $some_meta );
Đó là nó.
Lời giải thích thực sự chính xác ở trên phần bạn trích dẫn trong câu hỏi của bạn:
Tuy nhiên, load_template()
được gọi gián tiếp bằng cách get_template_part()
trích xuất tất cả các WP_Query
biến truy vấn, vào phạm vi của mẫu được tải.
Hàm PHP gốc extract()
"trích xuất" các biến (thuộc global $wp_query->query_vars
tính) và đặt mọi phần vào biến riêng có cùng tên với khóa. Nói cách khác:
set_query_var( 'foo', 'bar' );
$GLOBALS['wp_query'] (object)
-> query_vars (array)
foo => bar (string 3)
extract( $wp_query->query_vars );
var_dump( $foo );
// Result:
(string 3) 'bar'
set_query_var
vàget_query_var
, tuy nhiên điều này là sử dụng các giá trị của một$args
mảng được truyền cho mộtWP_Query
. Có thể hữu ích cho những người khác bắt đầu tìm hiểu điều này.