问题描述
我无法在循环之外获取帖子作者 ID,以使 get_the_author_meta 正常工作。到目前为止,我已经尝试过不同的方法:
1 。
$author_id=$post->post_author;
2 。
global $post;
$author_id=$post->post_author;
3 。
$post_tmp = get_post($post_id);
$author_id = $post_tmp->post_author;
4 。
$author_id = $posts[0]->post_author;
我需要作者 ID 将其传递给:
$address = get_the_author_meta('user_email', $author_id);
有什么建议么?
最佳解决方案
如果你知道这个帖子 ID,就是使用 WordPress 核心函数 get_post_field()
来获取发布作者 ID 在循环之外的最简单和最简单的方法。
$post_author_id = get_post_field( 'post_author', $post_id );
如果您还不知道所在页面的帖子 ID,那么由于 WP 3.1 最简单的做法是使用 get_queried_object_id()
(在方法列表中查找它),甚至在循环之外。
$post_id = get_queried_object_id();
如果这些不适合您,那么请详细说明您尝试运行代码的位置,我们可以看到我们是否可以进一步帮助。
次佳解决方案
以下是获取并获取 WordPress 循环外的作者 ID 的方法:
<?php
global $post;
$author_id=$post->post_author;
?>
那么有可能我们 the_author_meta
:
<?php
the_author_meta( 'user_nicename', $author_id );
?>
第三种解决方案
取决于你在哪里如果你在一个单一的页面 (例如,只显示一个 {{Insert Post Type Here}}),你可以使用 get_queried_object
,它将获取 post 对象。
<?php
if (is_singular()) {
$author_id = get_queried_object()->post_author;
$address = get_the_author_meta('user_email', $author_id);
}
如果你在别的地方,可以使用全局 $wp_query
对象,并检查其 $posts
属性。这也应该在单个页面上工作。
<?php
global $wp_query;
if (!empty($wp_query->posts)) {
$author_id = $wp_query->posts[0]->post_author;
$address = get_the_author_meta('user_email', $author_id);
}
您也可以只是”false start” 的循环,并回滚以获取作者 ID 。这不会导致任何额外的数据库命中等。 WordPress 一次 (在写作时) 获取所有帖子。 rewind_posts
只将当前帖子 (全局 $post
) 对象重置为数组的开头。不利的是,这可能导致 loop_start
动作比您想要的方式早一点 – 不是一件很大的事情,只是需要注意的事情。
<?php
// make sure you're at the beginning.
rewind_posts();
// start the loop
the_post();
// get what you need
$address = get_the_author_meta('user_email');
// back to normal
rewind_posts();
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。