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.phptệ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_Querybiế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_varstí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_varvàget_query_var, tuy nhiên điều này là sử dụng các giá trị của một$argsmả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.