如何在循环外获取作者ID


16

我无法在循环之外获取帖子作者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);

有什么建议么?


检查一下,这对我有用。
Asaf Chertkoff

Answers:


38

如果您知道帖子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();

如果这些方法对您不起作用,请提供您尝试在何处运行代码的详细说明,我们可以看看是否可以提供进一步的帮助。


9

以下是在WordPress循环之外获取和获取作者ID的方法:

<?php
global $post;
$author_id=$post->post_author;
?>

那么我们就有可能the_author_meta

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

如果您有权访问帖子ID,则效果很好。如果您不想立即输出值,也可以使用get_the_author_meta('user_nicename',$ author_id)
Andrew M

3

取决于你在哪里。如果您使用的是单个页面(例如,仅显示单个{{在此处插入帖子类型}}),则可以使用get_queried_object,它将获取帖子对象。

<?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(全局$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();

2

看起来它可以在循环之外运行,也许会有所帮助。

    $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以手动发布ID,以进行循环访问。

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


0

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

我使用了@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++;
}

0

在循环外获取和获取作者ID:

global $post;
$author_id = $post->post_author;

然后使用

get_the_author_meta('field_name', $author_id)

记住,如果您是在循环中获取帖子ID并在外部循环访问作者,则它将仅提供最后一个帖子ID的数据


0

希望这会有所帮助:

$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);
  }
}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.