Поскольку сообщения получают свои данные через the_post()
(соответственно через setup_postdata()
) и, следовательно, становятся доступными через API ( get_the_ID()
например, для), давайте предположим, что мы выполняем цикл через набор пользователей (поскольку setup_userdata()
заполняет глобальные переменные текущего пользователя, вошедшего в систему, и isn ' t полезно для этой задачи) и попробуйте отобразить метаданные для пользователя:
<?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' );
}
Затем в нашем wpse-theme/template-parts/user-contact_methods.php
файле нам нужно получить доступ к идентификатору пользователя:
<?php
/** @var int $user_id */
$some_meta = get_the_author_meta( 'some_meta', $user_id );
var_dump( $some_meta );
Вот и все.
Объяснение на самом деле точно выше той части, которую вы указали в своем вопросе:
Однако, load_template()
который вызывается косвенным путем, get_template_part()
извлекает все WP_Query
переменные запроса в область загруженного шаблона.
Нативная extract()
функция PHP «извлекает» переменные ( global $wp_query->query_vars
свойство) и помещает каждую часть в свою собственную переменную, имя которой точно совпадает с именем ключа. Другими словами:
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
иget_query_var
, тем не менее это было для использования значений в$args
массиве , который передается кWP_Query
. Может быть полезно для других людей, начинающих изучать это.