如何在循环外获取作者ID

时间:2012-09-18 作者:Marce Castro

我无法在循环之外获取post-author ID以使get\\u-author\\u元工作。到目前为止,我尝试了不同的方法:

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);
有什么建议吗?

8 个回复
SO网友:Max G J Panas

如果您知道帖子ID,那么在循环之外获取帖子作者ID的最简单、最直接的方法是使用WordPress核心函数get_post_field().

$post_author_id = get_post_field( \'post_author\', $post_id );
如果您还不知道您所在页面的帖子ID,那么由于WP 3.1,最简单的方法就是使用get_queried_object_id()(在方法列表中查找)函数,该函数甚至可以在循环外部工作。

$post_id = get_queried_object_id();
如果这些对您不起作用,那么请对您试图在哪里运行代码进行更详细的解释,我们可以看看是否可以进一步提供帮助。

SO网友:Alexander Poslavsky

以下是如何在WordPress循环之外获取作者ID:

<?php
global $post;
$author_id=$post->post_author;
?>
那么对我们来说the_author_meta:

<?php
the_author_meta( \'user_nicename\', $author_id );
?>

SO网友:chrisguitarguy

取决于你在哪里。如果您在一个单一的页面上(例如,只显示一个{{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);
}
您还可以“错误启动”循环并将其倒带以获取作者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();

SO网友:Ryan Dennler

这看起来像是在循环之外工作,也许这会有所帮助。

    $thelogin = get_query_var(\'author_name\');
    $theauthor = get_userdatabylogin($thelogin);
您还可以手动设置帖子ID,并通过以下方式抓取:

global $wp_query;
$thePostID = $wp_query->post->ID;
$postdata = get_post($thePostID, ARRAY_A);
$authorID = $postdata[\'post_author\'];
手动将ID out更改为post ID以进行环外访问。

不是很好的解决方案,但希望能有所帮助。

SO网友:Richard Dinh

我在这里遇到了同样的问题,当时我试图制作一个小部件,显示带有作者信息的特色帖子。

我使用了@chrisguitarguy第二个提示中的一些提示。

我的代码如下所示:

<?php    

$count = 0;
$query_args = array(
      \'posts_per_page\' => 5,
     );
$com_query = new WP_Query( $query_args );

$feat_posts = $com_query->posts; // array, so we can access each post based on position

while ($com_query->have_posts()) {              
    $com_query->the_post();
        $author_name= get_the_author_meta(\'user_nicename\',  $feat_posts[$count]->post_author);
        $count++;
}

SO网友:Alejandro Jose Velasquez Valle

希望这将有助于:

$args= array(
    \'post_type\' =>\'any\',
    \'post_status\' => \'publish\',
    \'order\' => \'ASC\',
    \'posts_per_page\' => \'-1\'
);
$posts = new WP_Query($args);
$posts = $posts->posts;   

foreach($posts as $post) { 
  switch ($post->post_type) {
     case \'page\': 
           // get the author\'s id through the post or page
           $id = get_post_field( \'post_author\', $post->ID);
           // the first parameter is the name of the author 
           // of the post or page and the second parameter 
           // is the id with which the function obtains the name of the author.
           echo get_the_author_meta(\'display_name\', $id);
        break;
    case \'post\': 
         $id = get_post_field( \'post_author\', $post->ID;
        echo get_the_author_meta(\'display_name\', $id);
  }
}

SO网友:Manish Chaubey

要获取并获取循环外部的作者ID,请执行以下操作:

global $post;
$author_id = $post->post_author;
然后使用

get_the_author_meta(\'field_name\', $author_id)
请记住,如果您在循环中获取帖子id并访问author out-side循环,那么它将只提供循环中最后一个帖子id的数据

SO网友:Kuldeep Daftary

为什么不使用the_author_meta

<p>The email address for user id 25 is <?php the_author_meta(\'user_email\',25); ?></p>
这可以在循环中使用

结束