루프 외부에서 Author ID를 얻는 방법


16

get_the_author_meta가 작동하도록 루프 외부의 게시물 작성자 ID를 얻을 수 없습니다. 지금까지 다른 접근법을 시도했습니다.

1.

$author_id=$post->post_author;

2.

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

삼.

$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

답변:


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를 가져올 수도 있습니다. 이로 인해 추가 데이터베이스 적중 등이 발생하지 않습니다. 워드 프레스는 모든 글을 한 번에 가져옵니다 (쓰기시). rewind_posts현재 게시물 (global $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를 수동으로 게시하도록 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);
  }
}

-2

_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
루프 외부 -질문에 유의하십시오.
Christine Cooper
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.