ループ外で著者IDを取得する方法


16

get_the_author_metaを機能させるために、ループ外で投稿者IDを取得することはできません。これまで私はさまざまなアプローチを試してきました。

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

助言がありますか?


これをチェックして、これは私のために働いた。
アサフチャートコフ

回答:


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)を使用することができます
アンドリュー・M

3

どこにいるかによって異なります。単一のページを使用している場合(たとえば、{{Insert Post Type Here}}を1つだけ表示している場合)、を使用し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
// 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の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

ループ外で著者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

the_author_metaを使用しないのはなぜですか

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

これはループ内で使用できます


感謝しますが、問題は私がループの外にいて、それを修正できないことです。ループの外にいるときは、2番目の引数($ author_id)を提供する必要があります。
マースカストロ

バンプ!何か案は?私を夢中にさせている:-/
Marce Castro

4
ループ外 -質問に注意してください。
クリスティーンクーパー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.