Як отримати ідентифікатор автора поза циклом


16

Я не можу отримати ідентифікатор автора публікації поза циклом, щоб заставити 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;

Мені потрібен ідентифікатор автора, щоб передати його:

$address = get_the_author_meta('user_email', $author_id);

Будь-які пропозиції?


перевірити це , це працювало для мене.
Асаф Черткофф

Відповіді:


38

Найпростіший і найпростіший спосіб отримати ідентифікатор автора публікації поза циклом, якщо ви знаєте ідентифікатор повідомлення, - це використовувати основну функцію WordPress get_post_field().

$post_author_id = get_post_field( 'post_author', $post_id );

Якщо ви ще не знаєте ідентифікатор повідомлення сторінки, на якій ви перебуваєте, то, оскільки WP 3.1 найпростіше зробити, це використовувати функцію get_queried_object_id()(шукайте її у списку методів), яка працює навіть поза циклом.

$post_id = get_queried_object_id();

Якщо це не допоможе вам, будь ласка, дайте більш детальне пояснення, де ви намагаєтеся запустити свій код, і ми зможемо побачити, чи зможемо ми надалі допомогти.


9

Ось як отримати та отримати авторський ідентифікатор поза циклом WordPress:

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

Тоді нам це можливо the_author_meta:

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

Це чудово працює, якщо у вас є доступ до ідентифікатора публікації. Ви також можете використовувати get_the_author_meta ('user_nicename', $ author_id), якщо ви не хочете виводити значення прямо зараз
Ендрю М

3

Залежить від того, де ти знаходишся. Якщо ви знаходитесь на одній сторінці (наприклад, показує лише один {{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);
}

Ви також можете просто "помилково запустити" цикл і перемотати його, щоб схопити ідентифікатор автора. Це не спричинить жодних додаткових звернень до бази даних тощо. 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();

2

Схоже, це працює поза петлею, можливо, це допоможе.

    $thelogin = get_query_var('author_name');
    $theauthor = get_userdatabylogin($thelogin);

Ви також можете вручну встановити ідентифікатор повідомлення та схопити такий спосіб:

global $wp_query;
$thePostID = $wp_query->post->ID;
$postdata = get_post($thePostID, ARRAY_A);
$authorID = $postdata['post_author'];

Змініть ідентифікатор, щоб розмістити ідентифікатор вручну, щоб отримати доступ із циклу.

Не чудові рішення, але, сподіваємось, це допомагає.


0

У мене була та сама проблема, коли я намагався зробити віджет, на якому відображалися вміщені публікації з інформацією про автора.

Я використав деякі підказки від @chrisguitarguy, 2 підказки.

Мій код виглядав так:

<?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

Щоб отримати і отримати ідентифікатор автора поза циклом:

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

Потім використовуйте

get_the_author_meta('field_name', $author_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);
  }
}

-2

Чому б не використовувати the_author_meta

<p>The email address for user id 25 is <?php the_author_meta('user_email',25); ?></p>

Це можна використовувати в циклі


Дякую, але проблема полягає в тому, що я за межами циклу і не можу це виправити. Коли ви знаходитесь поза циклом, потрібно надати другий аргумент ($ author_id).
Marce Castro

Бум! Будь-які ідеї? Це зводить мене з розуму: - /
Marce Castro

4
поза петлею - зверніть увагу на запитання.
Крістін Купер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.