问题描述

我无法在循环之外获取帖子作者 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。