As POST通过the_post()
(分别通过setup_postdata()
) 因此可以通过API访问(get_the_ID()
例如,让我们假设我们正在一组用户之间循环(如setup_userdata()
填充当前登录用户的全局变量,对该任务不有用),并尝试显示每个用户的元数据:
<?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
文件,我们需要访问用户ID:
<?php
/** @var int $user_id */
$some_meta = get_the_author_meta( \'some_meta\', $user_id );
var_dump( $some_meta );
就是这样。
更新(WP>;=v5.5)
正如评论中所指出的,当前版本的WP提供了第三个参数
get_template_part()
:
array $args
. 因此,从这个版本开始,您不需要使用
set_query_var( \'foo\', \'bar\' )
不再示例:
<?php
get_header();
// etc.
// In the main template file
$users = new \\WP_User_Query( [ ... ] );
foreach ( $users as $user )
{
$args = (array) $user;
get_template_part( \'template-parts/user\', \'contact_methods\', $args );
}
然后,在我们
wpse-theme/template-parts/user-contact_methods.php
文件,我们需要访问用户ID:
<?php
/** @var array $args */
$some_meta = get_the_author_meta( \'some_meta\', $args[\'ID\'] );
var_dump( $some_meta );
事实上,这一解释正好位于您在问题中引用的部分之上:
然而load_template()
, 间接称为get_template_part()
提取所有WP_Query
查询变量,放入加载模板的范围。
本机PHPextract()
“函数”;“摘录”;变量(即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\'