Как получить ID автора вне цикла WordPress

18 сент. 2012 г., 22:29:22
Просмотры: 66.4K
Голосов: 19

Я не могу получить 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);

Есть предложения?

1
Комментарии

посмотрите это, это сработало у меня.

Asaf Chertkoff Asaf Chertkoff
17 дек. 2012 г. 19:47:31
Все ответы на вопрос 8
0
45

Самый простой и прямой способ получить 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();

Если эти методы не работают в вашем случае, пожалуйста, предоставьте более подробное описание места, где вы пытаетесь выполнить код, и мы постараемся помочь вам дальше.

3 окт. 2013 г. 21:47:01
1
10

Вот как можно получить ID автора вне цикла WordPress:

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

Затем можно использовать функцию the_author_meta:

<?php
the_author_meta( 'user_nicename', $author_id );
?>
26 дек. 2012 г. 20:11:16
Комментарии

Это отлично работает, если у вас есть доступ к ID записи. Вы также можете использовать get_the_author_meta('user_nicename', $author_id ), если не хотите сразу выводить значение

Andrew M Andrew M
21 дек. 2016 г. 11:44:41
0

Зависит от того, где вы находитесь. Если вы на отдельной странице (например, отображается только один {{Insert Post Type Here}}), вы можете использовать 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) в начало массива. Недостаток в том, что это может вызвать срабатывание действия loop_start гораздо раньше, чем вы хотите — не критично, но стоит иметь в виду.

<?php
// убедитесь, что вы в начале.
rewind_posts();

// начинаем цикл
the_post();

// получаем то, что нужно
$address = get_the_author_meta('user_email');

// возвращаемся к нормальному состоянию
rewind_posts();
26 дек. 2012 г. 22:35:38
0

Похоже, это работает вне цикла, возможно, это поможет.

    $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 вручную на ID записи для доступа вне цикла.

Не самые лучшие решения, но, надеюсь, они помогут.

26 дек. 2012 г. 21:42:03
0

У меня была такая же проблема при попытке создать виджет, который отображал бы избранные записи с информацией об авторе.

Я использовал некоторые подсказки из второго совета @chrisguitarguy.

Мой код выглядел следующим образом:

<?php    

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

$feat_posts = $com_query->posts; // массив, поэтому мы можем получить доступ к каждой записи по позиции

while ($com_query->have_posts()) {              
    $com_query->the_post();
        $author_name= get_the_author_meta('user_nicename',  $feat_posts[$count]->post_author);
        $count++;
}
9 апр. 2014 г. 22:03:03
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': 
           // получаем ID автора через запись или страницу
           $id = get_post_field( 'post_author', $post->ID);
           // первый параметр - имя автора записи или страницы,
           // второй параметр - ID, по которому функция получает имя автора.
           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);
  }
}
28 дек. 2019 г. 06:12:54
0

Как получить ID автора вне цикла (loop):

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

Затем используйте:

get_the_author_meta('field_name', $author_id)

Важно помнить: если вы получаете ID записей в цикле, а доступ к автору осуществляете вне цикла, то будут возвращены данные только последней записи в цикле.

28 дек. 2019 г. 10:41:44
3
-2

Почему бы не использовать the_author_meta

<p>Email пользователя с ID 25: <?php the_author_meta('user_email',25); ?></p>

Может использоваться внутри цикла

19 сент. 2012 г. 00:58:41
Комментарии

Спасибо, но проблема в том, что я вне цикла и не могу это исправить. Когда вы находитесь вне цикла, необходимо указать второй аргумент ($author_id).

Marce Castro Marce Castro
19 сент. 2012 г. 01:16:23

Апдейт! Есть идеи? Это сводит меня с ума :-/

Marce Castro Marce Castro
21 сент. 2012 г. 21:41:42

outside the loop - обратите внимание на вопрос.

Christine Cooper Christine Cooper
26 дек. 2012 г. 20:28:37