web-dev-qa-db-ja.com

作成者IDをループの外側に取得する方法

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

助言がありますか?

14
Marce Castro

投稿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();

これらがうまくいかない場合は、どこでコードを実行しようとしているのかについて、より詳細な説明を入力してください。

35
Max G J Panas

WordPressループの外部で著者IDを取得および取得する方法は次のとおりです。

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

それならthe_author_meta

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

あなたがいる場所によります。単一のページにいる場合(たとえば、{{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(グローバル$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();
3
chrisguitarguy

これは、ループの外側で機能しているように見えますが、おそらく助けになるでしょう。

    $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を手動でpost idに変更します。

素晴らしい解決策ではありませんが、うまくいけば助けになるでしょう。

2
Ryan Dennler

著者情報付きのおすすめ投稿を表示するウィジェットを作成しようとしたときも、ここで同じ問題が発生しました。

私は@chrisguitarguyの2nd tipのヒントをいくつか使用しました。

私のコードはこんな感じでした:

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