您的代码正在干扰的内部结构WP_Query
和WP_Post
, 并对其工作原理做出假设。这是极不寻常的,在使用WordPress开发时不是最佳实践。
举个例子,官方没有post_meta
该类上的成员变量(https://developer.wordpress.org/reference/classes/wp_post/ ). 这不是获取posts元键/值的方式。
Instead, use a standard post loop, and standard API calls.
这是一个标准
WP_Query
post循环应如下所示:
$args = [
// parameters go here
];
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
// display the post
the_title();
the_content();
}
wp_reset_postdata();
} else {
echo "no posts were found";
}
请注意,标准的后循环生命周期以及所有预期的挂钩都会发生。您可以在
while
每个帖子的循环。例如,获取所有post meta。为此,请使用
get_post_meta
功能:
$all_meta = get_post_meta( get_the_ID() );
可能很容易想到
WP_Post
对象遵循了朴素的OO梦想,即为帖子提供一个包罗万象的API,一个帖子的一站式表示,以及所有需要知道和可以做的事情。但实际上它是一个数据容器。您找不到类方法或对其进行子分类的方法。
此外,通过浏览和直接访问内部数据结构,您可以绕过许多功能,并冒着代码将来被破坏的风险。例如,post meta提前获取并存储在WP_Cache
避免查询重复。还有一些过滤器允许插件和其他代码进行更改或修复。