Cara mendapatkan ID Penulis di luar loop

16

Saya tidak bisa mendapatkan ID penulis posting di luar loop untuk membuat get_the_author_meta berfungsi. Sejauh ini saya sudah mencoba berbagai pendekatan:

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;

Saya perlu ID penulis untuk meneruskannya ke:

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

Ada saran?

Marce Castro
sumber
lihat ini , ini bekerja untuk saya.
Asaf Chertkoff

Jawaban:

38

Cara paling sederhana dan paling mudah untuk mendapatkan ID penulis posting di luar loop, jika Anda tahu ID posting, adalah dengan menggunakan fungsi inti WordPress get_post_field().

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

Jika Anda belum tahu ID kiriman dari halaman yang Anda buka, maka karena WP 3.1 hal yang paling mudah untuk dilakukan adalah menggunakan fungsi get_queried_object_id()(mencarinya di daftar Metode) yang berfungsi bahkan di luar loop.

$post_id = get_queried_object_id();

Jika ini tidak berhasil untuk Anda maka tolong berikan penjelasan yang lebih rinci tentang di mana Anda mencoba menjalankan kode Anda dan kami dapat melihat apakah kami dapat membantu lebih lanjut.

Max GJ Panas
sumber
9

Berikut cara mendapatkan dan mendapatkan ID penulis di luar loop WordPress:

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

Maka dimungkinkan bagi kita the_author_meta:

<?php
the_author_meta( 'user_nicename', $author_id );
?>
Alexander Poslavsky
sumber
Ini berfungsi baik jika Anda memiliki akses ke ID pos. Anda juga dapat menggunakan get_the_author_meta ('user_nicename', $ author_id) jika Anda tidak ingin langsung menampilkan nilainya
Andrew M
3

Tergantung di mana Anda berada. Jika Anda berada di halaman tunggal (mis. Hanya menunjukkan satu {{Sisipkan Jenis Tulisan Di Sini}}), Anda dapat menggunakan get_queried_object, yang akan mengambil objek posting.

<?php
if (is_singular()) {
    $author_id = get_queried_object()->post_author;
    $address = get_the_author_meta('user_email', $author_id);
}

Jika Anda berada di tempat lain, Anda dapat menggunakan $wp_queryobjek global , dan memeriksa $postspropertinya. Ini harus bekerja pada halaman tunggal juga.

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

Anda juga bisa hanya "memulai salah" loop dan memundurkannya untuk mengambil ID penulis. Ini tidak akan menimbulkan klik database tambahan atau sejenisnya. WordPress mengambil semua posting sekaligus (pada saat penulisan). rewind_postshanya me-reset objek posting saat ini (global $post) ke awal array. Kelemahannya adalah ini dapat menyebabkan loop_startaksi menembak lebih awal dari yang Anda inginkan - bukan masalah besar, hanya sesuatu yang harus diperhatikan.

<?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();
chrisguitarguy
sumber
2

Ini sepertinya bekerja di luar loop, mungkin ini akan membantu.

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

Anda juga dapat secara manual mengatur ID posting dan ambil cara ini:

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

Ubah ID out untuk mengirim id secara manual untuk keluar dari akses loop.

Bukan solusi hebat, tapi mudah-mudahan ini membantu.

Ryan Dennler
sumber
0

Saya memiliki masalah yang sama di sini ketika mencoba membuat widget yang menampilkan posting yang ditampilkan dengan informasi penulis.

Saya menggunakan beberapa petunjuk dari ujung ke-2 @chrisguitarguy.

Kode saya terlihat seperti ini:

<?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++;
}
Richard Dinh
sumber
0

Untuk mendapatkan dan mendapatkan ID penulis di luar loop:

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

Kemudian gunakan

get_the_author_meta('field_name', $author_id)

ingat jika Anda mengambil id posting dalam loop dan mengakses sisi penulis keluar maka hanya akan memberikan data id posting terakhir dalam loop

Manish Chaubey
sumber
0

Semoga ini akan membantu:

$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);
  }
}
Alejandro Jose Velasquez Valle
sumber
-2

Mengapa Anda tidak menggunakan the_author_meta

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

Ini dapat digunakan dalam loop

Kuldeep Daftary
sumber
Terima kasih, tetapi masalahnya adalah saya berada di luar lingkaran dan tidak dapat memperbaikinya. Ketika Anda berada di luar loop, argumen kedua ($ author_id) perlu disediakan.
Marce Castro
Menabrak! Ada ide? Ini membuatku gila: - /
Marce Castro
4
di luar loop - harap perhatikan pertanyaannya.
Christine Cooper